如何在NSUserDefaults

时间:2015-11-19 11:51:01

标签: ios objective-c nsuserdefaults

在我的app用户可以添加标签并旋转并移动标签的位置。并添加标签是programmeticaly点击添加标签programmeticaly标签添加在视图中。现在我想实现undo和redo fetures。所以我将标签存储在NSArray中。我想如果我存储在数组中的标签中,然后使用键存储在NSUserDefaults中的数组存储,当用户单击撤消时,我将从视图中删除所有标签并添加我在NSMutableArray中存储但是标签的数组中的标签但它不存储在NSUserDefaults

NSData *lbldata = [NSKeyedArchiver archivedDataWithRootObject:labels];
[[NSUserDefaults standardUserDefaults] setObject:lbldata forKey:[NSString stringWithFormat:@"customLabel%i",UndoKey]];

我尝试像

这样的simpla数组
[[NSUserDefaults standardUserDefaults] setObject:labels forKey:[NSString stringWithFormat:@"customLabel%i",UndoKey]];

但它给了我错误。

上面代码标签中的

NSMutableArray。欢迎任何建议。谢谢你的时间过得愉快。

2 个答案:

答案 0 :(得分:3)

您的目标是允许用户进行撤消/重做。这个名为NSUndoManager的系统就是整个系统。您应该阅读其文档,而不是试图通过陪审团NSUserDefaults来寻找它不是有意的事情: https://developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia-CocoaApp/UndoManager.html

此外,NSUserDefaults不是存储完整UI对象类型的好地方。相反,如果您想要存储一些关于UI元素的标准,以便在下次打开应用时以相同的方式重新显示它,那么您可以只存储需要保存的条件。例如,您可能存储与NSString的{​​{1}}属性相关联的text,并存储与其位置相关联的UILabel以及与之关联的CGPoint它的旋转角度等。

但是对于撤消/重做,请不要使用NSNumber

答案 1 :(得分:0)

您可以获取UILabel的重要属性,例如NSDictionary

-frame,string,color等。

然后使用以下选项之一来存储/删除/更新标签:

  1. 使用sqlite存储属性。
  2. 使用CoreData存储属性。
  3. 将属性写入.plist文件
  4. 将NSDictionary存储到NSUserDefaults