在我的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
。欢迎任何建议。谢谢你的时间过得愉快。
答案 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等。
然后使用以下选项之一来存储/删除/更新标签: