2013-05-26 29 views
1

我的應用程序將子視圖寫入UIScrollView。這些子視圖是連接到用戶將輸入信息的應用程序的其他部分的按鈕。我想保存這些數據,包括應用退出時的子視圖。我的ViewController(存儲滾動視圖及其所有子視圖)在故事板中具有恢復ID。我如何使用它?這是我到目前爲止有:如何保持UIScrollView的狀態?

AppDelegate.m

- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder { 

    return YES; 
} 

- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder { 

    return YES; 
} 

ViewController.m

- (void)encodeRestorableStateWithCoder:(NSCoder *)coder { 

    [super encodeRestorableStateWithCoder:coder]; 
    [coder encodeObject:self.scrollView forKey:@"scrollView"]; 
} 

- (void)decodeRestorableStateWithCoder:(NSCoder *)coder { 

    [super decodeRestorableStateWithCoder:coder]; 
} 
+0

您是否聽說過'NSUserDefaults'屬性列表? –

+0

是的,但我認爲它不適用於我想要做的事情。 NSUserDefaults只顯示NSCoder兼容值。我可以將所有子視圖存儲在一個數組中,然後將該數組加載到NSUserdefaults對象中,但不能單獨重新顯示它們。有什麼辦法可以「快照」應用程序退出時的內容,然後重新加載該「快照」? – Carpetfizz

回答

1

在模型 - 視圖 - 控制器設計(或任何理智的設計),你不想物理存儲視圖,您不想保存其中可以從中重新創建視圖的其他模型數據。

根據您的簡短描述,您可能希望創建自己的支持NSCoding的模型對象,並存儲它所代表的對象的整個狀態。例如:

創建存儲基礎數據模型對象(實現NSCoder):

@interface ButtonInfo : NSObject <NSCoding> 
@property(nonatomic, copy)NSString* title; 
@property(nonatomic, assign)CGRect frame; 
@property(nonatomic, retain)UIColor* color; 
@end 

您可以在保存時生成視圖模型數據,或模型存儲旁邊的視圖。

- (void)saveButtonInfos 

或者:

- (void)saveViews:(NSArray*)views 
{ 
    NSMutableArray* toWrite = ... 
    for (view in views) 
    { 
     // make button info from view, add to array. 
    } 
} 

最後產生的負荷模型數據視圖。

- (void)loadViewsFrom:(NSArray*)buttonInfos 
{ 
    for (info in buttonInfos) 
    { 
     // Create new button 
     // modify properties 
    } 
}