无法创建 Plist 文件。 iOS+NSDictionary+JSON

Posted

技术标签:

【中文标题】无法创建 Plist 文件。 iOS+NSDictionary+JSON【英文标题】:Plist File cannot be created. iOS+NSDictionary+JSON 【发布时间】:2014-12-08 04:36:46 【问题描述】:

我在创建使用 JSON 保存从 Web 服务接收的数据的 Plist 文件时遇到问题。无法创建 Plist 文件。路径为空,数据无处保存。当我清理派生数据时出现此问题。请为此提出任何解决方案。

JSON 数据:

eventID = 2356;
eventName = "Testing Event";

这就是我在 Plist 中的保存方式:

NSArray *eventsDictionary = [dataDictionary objectForKey:@"eventList"];
NSDictionary *plistDict = [NSDictionary dictionaryWithObject:eventsDictionary
                                                              forKey:@"Events"];

if ([eventsDictionary count]==0) 
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    path = [path stringByAppendingPathComponent:DATA_DICTIONARY_KEY_USER_DEFAULTS];

    [plistDict writeToFile:path atomically:YES];
 
else 
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    path = [path stringByAppendingPathComponent:DATA_DICTIONARY_KEY_USER_DEFAULTS];
    [plistDict writeToFile:path atomically:YES];

非常感谢。

【问题讨论】:

请发布确切的错误。 1) 为什么你的数组变量命名为eventsDictionary 而不是eventsArray? 2)为什么只有在数组为空时才保存文件? @rebello95,没有错误。无法创建 Plist 文件。我不明白为什么。即使是documents文件夹也没有plist文件。 我假设DATA_DICTIONARY_KEY_USER_DEFAULTS 是一些无效路径,因此无法创建它。它的价值是什么? @rmaddy, 1) 我只是将其命名为 eventsDictionary,我认为这不是原因。 2)这意味着如果“eventsDictionary”为空,则保存数据。 【参考方案1】:

您在评论中提到数据是从 Web 服务以 JSON 格式获取的,然后转换为字典。

问题几乎可以肯定是您的 JSON 数据包含空值,这意味着您的字典包含 NSNull 的实例。您不能将NSNull 写入这样的文件,因为它不是属性列表类型之一。编写这样的文件仅适用于 NSDictionaryNSArrayNSStringNSDataNSNumberNSDate 的实例。此外,任何字典键都必须是字符串。

如果有NSNull(或任何非属性列表类的实例),那么像这样写入文件将会失败。

您需要检查数据并删除所有 NSNull 实例,或者以其他方式编写文件。

【讨论】:

没错。但这很奇怪,因为它之前保存为空值。无论如何,非常感谢你,先生:)【参考方案2】:

这是最简单的方法: 将您的字典添加到数组中:

NSMutableArray * mutArr = [NSMutableArray alloc]init];
[mutArr addObject:plistDict];
[self saveToPlistName:@"yourplist" fromArray:mutArr];

并使用此方法

-(void)saveToPlistName:(NSString *)plistName fromArray:(NSMutableArray*)array

    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentFolder = [path objectAtIndex:0];
    NSString *filePath = [documentFolder stringByAppendingFormat:[NSString stringWithFormat:@"/%@.plist",plistName]];
    [array writeToFile:filePath atomically:YES];
    NSLog(@"SAVE SUCCESS TO DIRECTORY%@",filePath);


如果对你有帮助,请投我一票

【讨论】:

仍然没有Plist文件。

以上是关于无法创建 Plist 文件。 iOS+NSDictionary+JSON的主要内容,如果未能解决你的问题,请参考以下文章

Objc执行时读取和写入plist文件遇到的问题

无法本地化 iOS info.plist 文件中的字符串

无法在 iOS 中将数据写入 .plist

无法编辑程序生成的 iOS plist

iOS,plist文件pch文件

加密/解密 .plist 文件 ios