你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS設計模式之(備忘錄模式,命令模式)

IOS設計模式之(備忘錄模式,命令模式)

編輯:IOS開發綜合
備忘錄(Memento)模式   備忘錄模式快照對象的內部狀態並將其保存到外部。換句話說,它將狀態保存到某處,過會你可以不破壞封裝的情況下恢復對象的狀態,也就是說原來對象中的私有數據仍然是私有的。   如何使用備忘錄模式   在ViewController.m中增加下面的方法:   Objective-c代碼   - (void)saveCurrentState      {          // When the user leaves the app and then comes back again, he wants it to be in the exact same state          // he left it. In order to do this we need to save the currently displayed album.          // Since it's only one piece of information we can use NSUserDefaults.          [[NSUserDefaultsstandardUserDefaults] setInteger:currentAlbumIndex forKey:@"currentAlbumIndex"];      }             - (void)loadPreviousState      {          currentAlbumIndex = [[NSUserDefaultsstandardUserDefaults] integerForKey:@"currentAlbumIndex"];          [self showDataForAlbumAtIndex:currentAlbumIndex];      }         saveCurrentState 保存當前的專輯索引到NSUserDefaults,NSUserDefaults是IOS提供的保存應用設置信息和數據的地方。   loadPreviousState 加載之前保存的索引。這裡其實不是備忘錄模式完整的實現,但是你已經了解到它了。 現在,在ViewController.m的viewDidLoad方法中,在scroller初始化之前增加下面的代碼:     Objective-c代碼   [self loadPreviousState];       它將在應用啟動的時候加載原先保存的狀態。但是在什麼時候來保存應用的狀態呢?你將使用通知來實現它。當應用進入後台的時候,IOS會發送UIApplicationDidEnterBackgroundNotification通知,你可以使用這個通知去保存狀態,這是不是很方便?    在viewDidLoad中增加下面的代碼:   Objective-c代碼   [[NSNotificationCenterdefaultCenter] addObserver:self selector:@selector(saveCurrentState) name:UIApplicationDidEnterBackgroundNotification object:nil];     現在,當應用進入後台的時候,ViewController將通過saveCurrentState方法自動保存當前的狀態。   現在增加下面的代碼:   Objective-c代碼   - (void)dealloc      {          [[NSNotificationCenterdefaultCenter] removeObserver:self];      }         這將確保當ViewController被銷毀的時候移除觀察者。   構建和運行你的應用,導航到一個專輯,然後通過Command+Shift+H(模擬器的情況下)將app發送到後台,然後關閉app。再一次打開app,檢查原先選擇的專輯是不是被顯示在中間:         看起來專輯數據是正確的,但是中間的視圖卻沒有顯示正確的專輯。出了什麼情況?這是可選方法initialViewIndexForHorizontalScroller的目的所在。因為這個方法沒有在委托中實現,這樣的話初始化視圖總是第一個視圖。 為了修正這個問題,在ViewController.m中增加下面的代碼:   Objective-c代碼   - (NSInteger)initialViewIndexForHorizontalScroller:(HorizontalScroller *)scroller      {          return currentAlbumIndex;      }         現在HorizontalScroller的第一個視圖終於設置為了currentAlbumIndex指定的視圖。這使得app在下次使用的時候還保留了上次使用的狀態。  
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved