将不同viewController中的字符串保存到plist而不覆盖旧的

时间:2014-08-08 22:44:45

标签: ios objective-c string save plist

我想将来自不同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);

问题:

  1. 我怎样处理这个问题,我的plist中的指针移到第二个位置,这样我就不会覆盖旧数据?

  2. 我只想从三个不同的ViewController中保存字符串(日期和一些文本)这是一个很好的方法,或者我应该使用核心数据吗?

2 个答案:

答案 0 :(得分:1)

我建议您使用核心数据它非常简单,可以避免您编写代码来管理保存,日期和奇怪的逻辑。它还为您提供了有用的功能,如:

  • 当托管对象发生更改或保存以允许您更新UI时的通知
  • 内置类(NSFetchedResultController),可帮助您有效地显示tableViews上的数据

要避免与核心数据相关的样板代码,请尝试查看magicalrecord

答案 1 :(得分:1)

解决第一个问题的两种方法:

  1. 为什么不使用静态和全局且对两个控制器都可见的NSArray,而不是创建每次都要覆盖的本地版本的数组,这样每个NSArray都会附加到同一个对象,因此他们不会踩到对方的脚趾。

  2. 而不是写入文件..附加到文件。

    NSString *contents = [NSString stringWithContentsOfFile:filepath];
    contents = [contents stringByAppendingString:textToWrite];
    [contents writeToFile:filepath atomically:YES encoding: NSUnicodeStringEncoding error:&err];
    
  3. 回答你的第二个问题..我会说这取决于数据交互的种类和数量..如果数据很小而且交互很少而且文件存储很少。

    如果数据很大并且交互开始变得越来越复杂......有多个类读写,CoreData绝对是一个可以选择的选项。

    我的2美分值