我正在尝试使用NSUserDefaults保存草稿,但我不确定它是否是保存数据而不是用户首选项的正确位置。
我的应用程序允许用户选择1或2个图像进行上传和共享。用户可以保存草稿并稍后返回上传。我目前的方法是将选定的UIImage保存到/ Library目录并将文件路径保存到NSUserDefaults。
数据结构是NSUserDefaults - >草稿NSDictionary - >关键 - NSArray。我有很多草稿(就像电子邮件草稿一样)。草稿字典包含一个保存的日期字符串作为NSArray中的键和字符串文件路径。保存过程目前没有任何问题。但因为在NSUserDefaults doc,他们说:
默认系统允许 应用程序来自定义其行为 匹配用户的偏好。匹配用户的偏好。
所以,我不知道我的方法是否好,未来任何可能出现的问题?
您是否建议我使用任何简单的解决方案,无需编写太多代码即可。我知道有CoreData,但我不太了解它。是否容易学习和实施?
我不知道这是否会影响某些内存问题,但我希望用户可以保存少于100的草稿。
答案 0 :(得分:2)
您不希望将任何实际数据保存到NSUserDefaults,但是,可以将以前的应用程序状态保存为默认值,以便应用程序可以从停止的位置恢复。
您的数据结构似乎过于复杂。您只需将文件路径数组直接保存到用户默认值即可。
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
NSArray *draftPaths=[NSArray arrayWithObjects:filePath1, filePath2,nil];
[defaults setObject:draftPaths forKey:@"DraftPaths_Key"];
// to retrieve
NSArray *previousDraftPaths=[defaults objectForKey:@"DraftPaths_Key"];
您不希望将文件保存到缓存文件夹中,因为如果空间紧张,系统可以删除缓存。而是将它们保存到/Library
目录中的自定义文件夹中。您可以通过以下方式获取库的路径:
NSArray *libraryPaths=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libPath=[libraryPaths objectAtIndex:0];