【问题标题】:Not able to save data into Plist?无法将数据保存到 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 兼容的值。

标签: ios objective-c nsmutablearray plist nsmutabledictionary


【解决方案1】:

让我们试试吧:

  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);
    }
    
  2. metaImage或图片必须以NSData格式保存

希望对你有所帮助。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 1970-01-01
      • 2013-03-18
      • 2014-09-25
      • 2011-11-13
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多