gpt4 book ai didi

objective-c - 新手询问从 NSMutableArray 读取 NSMutableArray 并将 NSMutableArray 保存到文档文件

转载 作者:行者123 更新时间:2023-11-29 11:10:10 29 4
gpt4 key购买 nike

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];
}

这是我的问题:

  1. 我的 viewDidUnload 代码是否 a) 简单地用新的、扩展的数组(这是我想要做的),或者 b) 将新的、扩展的数组附加到已经存储在 Documents 文件夹中的数组,这样我最终得到的数组的长度是原来的两倍多一堆重复?

  2. 如果答案是“b)”,我需要更改什么才能执行“a)”?

  3. 是否更好 a) 按照我正在做的方式,在 viewDidUnload,或 b) 每次用户添加项目时扩展文档文件夹中的数组到 self.arrayOfHaiku?

  4. 如果答案是“b)”,我需要更改什么才能做到“b)”?

感谢您的帮助。

最佳答案

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

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

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

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

希望这对您有所帮助。

关于objective-c - 新手询问从 NSMutableArray 读取 NSMutableArray 并将 NSMutableArray 保存到文档文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940966/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com