我的应用将子视图写入UIScrollView
。这些子视图是链接到用户将信息输入到应用程序的其他部分的按钮。我想保存这些数据,包括应用程序退出时的子视图。我的ViewController(存储滚动视图及其所有子视图)在故事板中具有恢复ID。我该如何使用它?这就是我到目前为止所做的:
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 :(得分: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
}
}