如何使用NSCoding在我的应用程序中保存/加载数据?

时间:2014-03-21 05:16:17

标签: ios objective-c core-data uitableview nscoding

是的,我已经查看过与此类似的许多问题;但是,我仍然不太明白发生了什么,或者至少我无法弄清楚如何在我的申请中做到这一点。

所以基本上我的“练习”应用程序有一个主视图控制器,显示两个文本标签。这些文本标签由包含大型数组的NSObject类填充。用户输入他们想要去的数组中的数字,数组中该索引处的字符串成为一个标签中的文本,而用户输入的数字成为另一个标签中的文本。用户还可以通过按下按钮从阵列中“喜欢”字符串。发生这种情况时,将字符串及其索引号添加到驻留在主视图控制器中的两个单独的可变数组中。然后,当用户想要看到他们所有的“收藏夹”时,他们可以向上滑动(模态地)调出具有所有用户“喜欢的字符串”的uitableview。这是通过使用导航控制器/ segue将数据(2个可变数组)从主视图控制器传递到uitableviewcontroller来实现的。此时,uitableviewcontroller中有2个可变数组,其中包含主视图控制器中的字符串和索引号。然后使用委托/协议将此数据传递回主视图控制器,以在主视图控制器的标签中设置文本(在用户点击uitableview的行中)。

构建应用程序没有问题;一切都很完美。但我不知道如何保存数据,以便当用户退出应用程序并重新打开它时,他们仍然可以看到包含他们所喜爱的所有字符串的表视图。另外,我只是假设在我的情况下,我应该使用NSCoding;但是,如果我需要使用核心数据或其他任何内容,请告诉我。如果有人能帮助我,我真的很感激。请详细解释,如果可能,请提供示例代码。

3 个答案:

答案 0 :(得分:2)

您可以使用以下方法之一来实现它

  1. 核心数据 - 如果您正在处理大量记录,那就去吧。但根据我的理解,这对您的解决方案来说是非常必要的。
  2. NSUserDefauls - 如果您的收藏仅限于数百条记录,那么这是最佳选择
  3. NSKeyArchiver/NSCoding - 如果要将对象保存到本地文件系统,可以使用此选项 有关此
  4. 的更多信息,请参阅here

    快乐编码

答案 1 :(得分:0)

使用writeToURL:atomically来保存包含NSNumber对象的数组。只需为要保存数组的位置创建一个URL,然后在阵列上调用该方法,

NSURL *docURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
saveURL = [docURL URLByAppendingPathComponent:@"MyIndexArray"];  
BOOL success = [myArray writeToURL:saveURL atomically:YES];
NSLog(@"success is: %d",success);

答案 2 :(得分:0)

事实证明我一直在做这件事。我使用NSUserDefaults保存数组,前提是它们不是空的,然后我将数组设置为NSUserDefaults,如果它们的键存在的话。我唯一的问题是试图弄清楚在哪里进行保存和加载。起初,我是在viewWillAppear& viewWillDisappear,但在退后一步并真正了解NSUserDefaults做了什么之后,我在viewWillDisappear& viewDidLoad中。无论如何,谢谢你的帮助。欢呼声。