gpt4 book ai didi

ios - 无法写入 plist 文件

转载 作者:行者123 更新时间:2023-11-28 23:12:47 30 4
gpt4 key购买 nike

我在网站上发现了几个有类似问题的人的问题,但我仍然无法解决我的问题。事情是这样的:

我正在制作一个包含两个 plist 文件的 iOS 应用程序。当用户第一次打开应用程序时,应用程序负责将这两个文件移动到 Documents 目录。我知道这段代码有效,因为我随后能够读取文档目录路径中的每个文件。但是,由于明显的未知原因,我无法写信给他们中的任何一个。这是我用来写入第一个 plist 文件的代码:

+ (void)insertNewElementWith:(NSArray *)objects andKeys:(NSArray *)keys {
NSString *filePath = [self returnPathForFirstPlistFile];
NSMutableDictionary *contentOfFirstPlistFile = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
[contentOfFirstPlistFile setObject:dictionary forKey:[NSNumber numberWithInt:[contentOfFirstPlistFile count]]];
[contentOfFirstPlistFile writeToFile:filePath atomically:YES];
[dictionary release];
}

returnPathForFirstPlistFile 确实 有效,因为 contentOfFirstPlistFile 包含 { } 而不是 null .但是,任何人都可以向我解释为什么它一直返回 { },即使上面的方法已被调用多次。

更新

这是我用来将文件放入 Documents 目录的代码。 placePlistsInDocumentsDirectory 在用户通过应用登录时调用,因此这只会发生一次。

+ (NSString *)returnPathForFirstPlistFile {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"First.plist"];

return filePath;
}

+ (NSString *)returnPathForSecondPlistFile {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"%@", [paths objectAtIndex:0]);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Second.plist"];

return filePath;
}

+ (void)placePlistsInDocumentsDirectory {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *firstPlistPath = [self returnPathForFirstPlistFile];
NSString *secondPlistPath = [self returnPathForSecondPlistFile];

if (![fileManager fileExistsAtPath:firstPlistPath]) {
NSError *error;
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"First" ofType:@"plist"];
[fileManager copyItemAtPath:bundle toPath:firstPlistPath error:&error];
}

if (![fileManager fileExistsAtPath:secondPlistPath]) {
NSError *error;
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Second" ofType:@"plist"];
[fileManager copyItemAtPath:bundle toPath:secondPlistPath error:&error];
}
}

最佳答案

[NSNumber numberWithInt:[contentOfFirstPlistFile count]]

给你一个 NSNumber 对象。这不是字典的有效键,键必须是 NSString。使用

[NSString stringWithFormat:@"%d",[contentOfFirstPlistFile count]]

相反。不过,如果您使用数字作为字典中的键,为什么不使用数组呢?

我曾尝试自己重现这个问题,唯一可以解决的方法是使用一个没有字典作为其根对象的 plist。这返回了一个非零的字典,但不允许任何修改。然后无法将其写回到文件中。查看您之前的一些问题,您之前使用的是基于数组的 plist,所以这可能是问题所在。

关于ios - 无法写入 plist 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7698358/

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