2012-08-13 71 views
1

viewDidLoad,我的应用程序填充的NSMutableArray arrayOfHaiku,这是NSDictionary项的数组,如下所示:当使用新手询问读取的NSMutableArray和保存的NSMutableArray到文档文件

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"haiku.plist"]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
if (![fileManager fileExistsAtPath: path]) 
{ 
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"haiku" ofType:@"plist"]; 
[fileManager copyItemAtPath:bundle toPath: path error:&error]; 
} 
self.arrayOfHaiku = [[NSMutableArray alloc] initWithContentsOfFile: path]; 

的应用,用户将项目添加到self.arrayOfHaiku。截至目前,我包括在viewDidUnload下面的代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"haiku.plist"]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
if ([fileManager fileExistsAtPath: path]) 
{ 
    [self.arrayOfHaiku writeToFile:path atomically:YES]; 
} 

这里是我的问题:

  1. 难道我对viewDidUnload代码),只需在文件存储在文件夹中的阵列写(也就是,在viewDidLoad中访问的数组)与新的扩展数组(这是我想要做的),或者它b)将新的扩展数组追加到已存储在Documents文件夹中的数组中,以便最终数组的长度是一串重复的两倍多?

  2. 如果答案是“b)”,那么我需要改变做“a)”?

  3. 更好的方法是以这种方式做到这一点,在viewDidUnload,或b)每当用户添加项目到self.arrayOfHaiku时,展开文档文件夹中的数组?

  4. 如果答案是“b)”,那么我需要改变做“b)”?

感谢您的帮助。

回答

2
  1. 如果文件存在,它将被覆盖,否则会被创建(选项a)。

  2. 这一切都取决于记录的数量。如果你有一个庞大的数字,那么每次重写它们可能会很昂贵。否则,你必须寻找另一种解决方案。我诚实地不会建议使用viewDidUnload,因为它可能不会在某些情况下触发,例如,如果该应用程序是后台。

  3. 不幸的是,没有准备好的功能用于像'writeToFile:'这样的字典对象'更新'plist。你可以使用NSFileHandler的fileHandleForUpdatingAtPath:函数,但你必须手动更改plist文件(我不认为这是一个简单的过程)。

我个人会建议使用Core Data,除非你的数据结构非常简单,“选项”不会是一个昂贵的过程。

希望这有助于。

+0

非常非常感谢!数据结构非常简单('self.arrayOfHaiku'是'NSDictionary'项目的数组,每个项目包含两个对象和两个键),self.arrayOfHaiku不可能包含超过200或300个项目,所以我我会在几个地方尝试它 - 看看每次做它需要多少成本,或者它是否会影响到将它放在其他地方 - 但我没有想过使用viewDidUnload来解决这个问题,所以无论如何我会为它找到一个新家。非常非常感谢你! – 2012-08-13 19:59:02