我想将来自不同ViewControllers的一些字符串保存到ONE plist。 目前我的VC1的viewDidLoad将字符串保存到plist,当我调用VC2时,我的plist被VC2中的字符串覆盖。
我在VC1和VC2中的viewDidLoad是相同的,如下所示:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSArray *array = [NSArray arrayWithObjects:dateString , nil ];
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentFolder = [path objectAtIndex:0];
NSString *filePath = [documentFolder stringByAppendingFormat:@"list.plist"];
//save to array
[array writeToFile:filePath atomically:YES];
NSLog(@"file Stored at %@",filePath);
问题:
我怎样处理这个问题,我的plist中的指针移到第二个位置,这样我就不会覆盖旧数据?
我只想从三个不同的ViewController中保存字符串(日期和一些文本)这是一个很好的方法,或者我应该使用核心数据吗?
答案 0 :(得分:1)
我建议您使用核心数据它非常简单,可以避免您编写代码来管理保存,日期和奇怪的逻辑。它还为您提供了有用的功能,如:
要避免与核心数据相关的样板代码,请尝试查看magicalrecord
答案 1 :(得分:1)
解决第一个问题的两种方法:
为什么不使用静态和全局且对两个控制器都可见的NSArray,而不是创建每次都要覆盖的本地版本的数组,这样每个NSArray都会附加到同一个对象,因此他们不会踩到对方的脚趾。
而不是写入文件..附加到文件。
NSString *contents = [NSString stringWithContentsOfFile:filepath];
contents = [contents stringByAppendingString:textToWrite];
[contents writeToFile:filepath atomically:YES encoding: NSUnicodeStringEncoding error:&err];
回答你的第二个问题..我会说这取决于数据交互的种类和数量..如果数据很小而且交互很少而且文件存储很少。
如果数据很大并且交互开始变得越来越复杂......有多个类读写,CoreData绝对是一个可以选择的选项。
我的2美分值