无法将数据保存到 Plist 中?

Posted

技术标签:

【中文标题】无法将数据保存到 Plist 中?【英文标题】:Not able to save data into Plist? 【发布时间】:2014-04-19 02:03:06 【问题描述】:

嗨,我有一个NSMutableDictionary,我添加了 5 个带有键(纬度、经度、强度、图像、元图像)的对象,然后我尝试将它添加到 NSMutableArray 中并将 NSMutableArray 写入 .plist 文件.但实际上它不是写作。我的 .plist 文件还是空的。

请检查我的代码:

paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"history.plist"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath];

if([latitude length]>0 && [longitude length]>0)
[dictValue setObject:latitude forKey:@"latitude"];
[dictValue setObject:longitude forKey:@"longitude"];

[dictValue setObject:metaImage forKey:@"imageData"];
[dictValue setObject:image forKey:@"image"];
if([_intensity.text length]>0)
[dictValue setObject:_intensity.text forKey:@"intensity"];
else
    intensityAlert=[[UIAlertView alloc]initWithTitle:@"Beta App" message:@"Please select intensity." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [intensityAlert show];


if(fileExists)
    finalArray=[[NSMutableArray alloc]initWithContentsOfFile:filePath];
    [finalArray addObject:dictValue];
    NSLog(@"dd%@",dictValue);

else
    [finalArray addObject:dictValue];
    NSLog(@"new%@",finalArray);


[finalArray writeToFile:filePath atomically:YES];

之后我使用以下代码检查 plist 中的数据

   finalArray=[[NSMutableArray alloc]initWithContentsOfFile:filePath];
    NSLog(@"server%@",finalArray);

它打印零值。

【问题讨论】:

metaImageimage是什么数据类型?如果不先将NSData 转换为NSData,就无法将UIImage 对象存储在plist 中。 uiimage,所以我需要将其转换为 nsdata ryt? 如果“ryt”是指“正确”,那么是的,您需要将UIImage 转换为NSData 并将NSData 放入字典中。 喜欢这个 imageData= UIImageJPEGRepresentation(image,0.0); 可能是因为文件从未被写入,因为您试图在数组中存储非 plist 值。检查writeToFile:atomically: 的返回值。如果它返回NO,则表示文件未保存。数组中只能有 plist 兼容的值。 【参考方案1】:

让我们试试吧:

    finalArray 分配在 else:

    if(fileExists)
     finalArray=[[NSMutableArray alloc]initWithContentsOfFile:filePath];
     [finalArray addObject:dictValue];
     NSLog(@"dd%@",dictValue);
    else
     // let be sure that final array allocated : [[NSMutableArray alloc] initWith...]
     [finalArray addObject:dictValue];
     NSLog(@"new%@",finalArray);
    
    

    metaImage或图片必须以NSData格式保存

希望对你有所帮助。

【讨论】:

【参考方案2】:

作为- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag的文档:

此方法递归地验证所有包含的对象是 属性列表对象(NSData、NSDate、NSNumber 的实例, NSString、NSArray 或 NSDictionary)在写出文件之前,以及 如果所有对象都不是属性列表对象,则返回 NO,因为 结果文件不是有效的属性列表。

您可以尝试将图片保存到文件夹中,并将图片相对文件路径保存到plist文件中。

【讨论】:

以上是关于无法将数据保存到 Plist 中?的主要内容,如果未能解决你的问题,请参考以下文章

将数据保存到每个对象或人的 plist

如何每次将新数据保存到我的 plist 文件而不是替换旧数据?

将 NSMutableArray 保存到 plist [关闭]

如何将自定义数组保存/重新加载到 plist

无法将 Plist 中的数据加载到数组中

请帮助理解保存数据。核心数据与 plist