Objective c 询问从文档文件读取NSMutableArray并将其保存到文档文件的新手

Objective c 询问从文档文件读取NSMutableArray并将其保存到文档文件的新手,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,在viewDidLoad上,我的应用程序填充NSMutableArrayarrayOfHaiku,这是一个由NSDictionary项组成的数组,如下所示: NSError *error; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 NSString *documentsDirectory = [paths objectAtInde

viewDidLoad
上,我的应用程序填充NSMutableArray
arrayOfHaiku
,这是一个由
NSDictionary
项组成的数组,如下所示:

 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];
}
以下是我的问题:

  • 我的
    viewDidUnload
    a)代码是用新的扩展数组(这是我想要做的)简单地写在文档文件夹中存储数组的文档上(即在
    viewDidLoad
    中访问的数组),还是b)附加新数组,将数组扩展到已经存储在Documents文件夹中的数组,这样我就可以得到一个长度超过两倍的数组,并进行大量重复

  • 如果答案是“b”,我需要更改什么来执行“a”

  • a)在
    viewDidUnload
    中按我的方式执行,还是b)每次用户向self.arrayOfHaiku添加项目时,在documents文件夹中展开数组更好

  • 如果答案是“b”,我需要更改什么来执行“b”

  • 谢谢你的帮助

  • 如果文件存在,将覆盖该文件,否则将创建该文件(选项a)

  • 这完全取决于记录的数量。如果你有一个巨大的数字,那么每次重写它们可能会很昂贵。否则,您必须寻求另一种解决方案。老实说,我不建议使用
    viewDidUnload
    ,因为它在某些情况下可能不会启动,例如,如果应用程序是后台的

  • 不幸的是,没有现成的函数可以使用字典对象“更新”plist,如
    writeToFile:
    。您可以使用NSFileHandler的
    fileHandleForUpdateingAtPath:
    函数,但是您必须手动更改plist文件(我认为这不是一个简单的过程)

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


    希望这有帮助。

    非常非常感谢!数据结构非常简单(
    self.arrayOfHaiku
    是一个由
    NSDictionary
    项组成的数组,其中每个项正好包含两个对象和两个键),而self.arrayOfHaiku不太可能包含超过200或300项,因此我将在几个地方试用它——看看每次使用它需要多少成本,或者把它放在别处会不会有什么不同——但我没有考虑过
    viewDidUnload
    的问题,所以无论如何,我会为它找到一个新家。非常非常感谢你!