Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何保存UIScrollView的状态?_Ios_Objective C_Uiscrollview - Fatal编程技术网

Ios 如何保存UIScrollView的状态?

Ios 如何保存UIScrollView的状态?,ios,objective-c,uiscrollview,Ios,Objective C,Uiscrollview,我的应用程序将子视图写入UIScrollView。这些子视图是链接到应用程序其他部分的按钮,用户将在其中输入信息。我想保存此数据,包括应用程序退出时的子视图。我的ViewController(存储滚动视图及其所有子视图)在情节提要中具有恢复ID。我怎么用这个?这就是我到目前为止所做的: AppDelegate.m - (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder

我的应用程序将子视图写入
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];
}

在“模型-视图-控制器设计”(或任何sane设计)中,如果不希望物理存储视图,则不希望保存其他一些可以从中重新创建视图的模型数据

根据您的简短描述,您可能希望创建自己的模型对象,该模型对象支持NSCoding并存储它所表示的对象的整个状态。例如:

创建存储基本数据的模型对象(实现NSCoder):

或:

最后,从加载时的模型数据生成视图

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

在“模型-视图-控制器设计”(或任何sane设计)中,如果不希望物理存储视图,则不希望保存其他一些可以从中重新创建视图的模型数据

根据您的简短描述,您可能希望创建自己的模型对象,该模型对象支持NSCoding并存储它所表示的对象的整个状态。例如:

创建存储基本数据的模型对象(实现NSCoder):

或:

最后,从加载时的模型数据生成视图

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

您听说过
NSUserDefaults
属性列表吗?是的,但我认为它对我正在尝试的工作不起作用。NSUserDefaults只接受符合NSCoder的值。我可以将我的所有子视图存储在一个数组中,然后将该数组加载到NSUserdefaults对象中,但这样我就无法单独重新显示它们。是否有一种方法可以让我“快照”退出时的应用程序,然后重新加载该“快照”?您听说过
NSUserDefaults
属性列表吗?是的,但我认为它不适用于我正在尝试的操作。NSUserDefaults只接受符合NSCoder的值。我可以将我的所有子视图存储在一个数组中,然后将该数组加载到NSUserdefaults对象中,但这样我就无法单独重新显示它们。有没有一种方法可以让我只“快照”退出时的应用程序,然后重新加载“快照”?
- (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
    }
}