1

我的应用程序将子视图写入UIScrollView. 这些子视图是链接到用户将在其上输入信息的应用程序的其他部分的按钮。我想保存这些数据,包括应用程序退出时的子视图。我的 ViewController(存储滚动视图及其所有子视图)在情节提要中有一个恢复 ID。我该如何使用它?这是我到目前为止所拥有的:

AppDelegate.m

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

    return YES;
}

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

    return YES;
}

视图控制器.m

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

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

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

    [super decodeRestorableStateWithCoder:coder];
}
4

1 回答 1

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
    }
}
于 2013-05-26T22:56:09.193 回答