无法将数据保存到 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);
它打印零值。
【问题讨论】:
metaImage
和image
是什么数据类型?如果不先将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 文件而不是替换旧数据?