你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 設計形式開辟中的備忘錄形式在iOS運用開辟中的應用實例

設計形式開辟中的備忘錄形式在iOS運用開辟中的應用實例

編輯:IOS開發綜合

作甚備忘錄形式?

    在呼應某些事宜時,運用法式須要保留本身的狀況,好比當用戶保留文檔或法式加入時。例如,游戲加入之前,能夠須要保留以後會話的狀況,如游戲品級、仇敵數目、可用兵器的品種等。游戲再次翻開時,玩家可以從分開的處所接著玩。許多時刻,保留法式的狀況真的不須要甚麼特殊奇妙的辦法。任何簡略有用的辦法都可以,然則同時,保留信息應當只對原始法式成心義。原始法式應當是可以或許解碼它所保留文檔中的信息的獨一實體。這就是備忘錄形式運用於游戲、文字處置等法式的軟件設計中的方法,這些法式須要保留以後高低文的龐雜狀況的快照並在今後恢復。

    備忘錄形式:在不損壞封裝的條件下,捕捉一個對象的外部狀況,並在該對象以外保留這個狀況。如許今後便可將該對象恢復到本來的保留狀況。

什麼時候應用備忘錄形式?

    當同時知足以下兩個前提時,應該斟酌應用這一形式:

    @:須要保留一個對象(或某部門)在某一個時辰的狀況,如許今後便可以恢復到先前的狀況。

    @:用於獲得狀況的接口會暴漏完成的細節,須要將其隱蔽起來。

若何應用備忘錄形式:
在ViewController.m中增長上面的辦法:

- (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初始化之前增長上面的代碼:

[self loadPreviousState];

它將在運用啟動的時刻加載本來保留的狀況。然則在甚麼時刻來保留運用的狀況呢?你將應用告訴來完成它。當運用進入後台的時刻,IOS會發送UIApplicationDidEnterBackgroundNotification告訴,你可使用這個告訴去保留狀況,這是否是很便利?
在viewDidLoad中增長上面的代碼:

[[NSNotificationCenterdefaultCenter] addObserver:self selector:@selector(saveCurrentState) name:UIApplicationDidEnterBackgroundNotification object:nil];

如今,當運用進入後台的時刻,ViewController將經由過程saveCurrentState辦法主動保留以後的狀況。
如今增長上面的代碼:

- (void)dealloc
 
{
 
    [[NSNotificationCenterdefaultCenter] removeObserver:self];
 
}

這將確保當ViewController被燒毀的時刻移除不雅察者。
構建和運轉你的運用,導航到一個專輯,然後經由過程Command+Shift+H(模仿器的情形下)將app發送到後台,然後封閉app。再一次翻開app,檢討本來選擇的專輯是否是被顯示在中央:

2016330120926817.png (214×320)

看起來專輯數據是准確的,然則中央的視圖卻沒有顯示准確的專輯。出了甚麼情形?這是可選辦法initialVieWindexForHorizontalScroller的目標地點。由於這個辦法沒有在拜托中完成,如許的話初始化視圖老是第一個視圖。
為了修改這個成績,在ViewController.m中增長上面的代碼:

- (NSInteger)initialVieWindexForHorizontalScroller:(HorizontalScroller *)scroller
 
{
 
    return currentAlbumIndex;
 
}

如今HorizontalScroller的第一個視圖終究設置為了currentAlbumIndex指定的視圖。這使得app鄙人次應用的時刻還保存了前次應用的狀況。
再一次運轉你的app,和之前一樣轉動專輯,停滯運用,重啟,確保下面的成績曾經修復了:

2016330120950078.png (214×320)

假如你檢查PersistencyManager的init辦法,你將留意到專輯數據被硬編碼而且每次都要從新創立它們。然則更好的方法是創立專輯列表一次,然後存儲它們到一個文件,你怎樣保留專輯數據到一個文件呢?
一個可選的方法就是輪回Album的屬性,保留它們到一個plist文件中,當它們須要的時刻再從新構建它們。這個不是一個最好的方法,由於你須要去編寫與每一個類的屬性聯系關系的特定的代碼。舉例來講假如過會你要創立一個具有分歧屬性的Movie類,保留和加載的代碼須要從新寫。
另外,你也不克不及保留每一個類的公有變量,由於它們在裡面的類中是弗成見的。這恰是蘋果創立了歸檔(Archiving)機制的緣由。

Cocoa Touch框架中的備忘錄形式

    Cocoa Touch框架在歸檔、屬性列表序列化和焦點數據中采取了備忘錄形式。Cocoa的歸檔是對對象及其屬性還有同其他對象間的關系停止編碼,構成一個文檔,該文檔既可以保留於文件體系,也能夠在過程或收集間傳送。對象與其他對象的關系被看作對象圖的收集。歸檔進程把對象保留為一種與架構有關的字撙節,堅持對象的標識和對象之間的關系。對象的類型也同數據一路保留。從字撙節解碼出來的對象平日用與對象編碼時雷同的類型停止實例化。
   假如想歸檔一個對象,許多時刻我們是斟酌保留法式的狀況。在模子-視圖-掌握器范式中,法式的狀況平日由模子對象來停止保護。我們把模子對象編碼到文檔,然後再對其解碼讀回來。在運轉時應用NSCoder對象停止編碼與解碼操作。NSCoder自己是個籠統類。蘋果公司建議經由過程NSCoder的詳細類NSKeyArchiver和NSKeyedUnarchiver,應用基於鍵的歸檔技巧。被編碼與解碼的對象必需遵照NSCoding協定並完成以下辦法:

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;

【設計形式開辟中的備忘錄形式在iOS運用開辟中的應用實例】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved