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

时间:2014-12-08 04:36:47

标签: ios json nsdictionary plist

我在创建Plist文件时遇到问题,该文件使用JSON保存从Web服务接收的数据。无法创建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];
}

非常感谢你。

2 个答案:

答案 0 :(得分:0)

这是最简单的方法: 将你的dict添加到数组:

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);

}

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

答案 1 :(得分:0)

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

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

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

您需要浏览数据并删除所有NSNull实例,否则请以其他方式编写文件。