将数据保存在属性列表中

时间:2011-05-03 21:35:20

标签: iphone objective-c

我想在属性列表中保存一组对象。 我是通过使用这种方法完成的:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Data.plist"];

DataObj *obj1 = [[DataObj alloc]initWithDataObj:@"Facebook" :@"yosi" :@"1234" :[UIImage imageNamed:@"blogger.png"] ];
DataObj *obj2 = [[DataObj alloc]initWithDataObj:@"Facebook2" :@"yosi2" :@"12345" :[UIImage imageNamed:@"blogger.png"] ];

self.list = [[NSMutableArray alloc]initWithObjects:obj1,obj2,nil ];

[self.list writeToFile:finalPath atomically:YES];

DataObj中的第四个对象是一个图像而我无法将其保存在属性列表中,这个问题有什么解决方案吗?

5 个答案:

答案 0 :(得分:1)

您需要在保存之前将UIImage转换为NSData。

 NSData *data = UIImagePNGRepresentation(img);

更新:请参阅此answer以获得更强大的解决方案。

答案 1 :(得分:0)

将图像写入应用程序文档目录中的文件,并将文件名或文件路径保存到图像中的属性列表中。

答案 2 :(得分:0)

如果您正在使用imageNamed,那么我假设图像在您的主要包中,在这种情况下,我会将图像名称放在plist中,并在您阅读时再次使用imageNamed:

另一种选择是将图像转换为可编码的内容,如NSData对象。当您重新读取属性列表时,将数据转换回UIImage。

看一看 UIImagePNGRepresentation

-initWithData:

答案 3 :(得分:0)

您正在将DataObj个对象放入您尝试保存为plist的数组中。 Plist文件不能包含任意对象,因此不起作用。

图像是您的第二个问题。

答案 4 :(得分:-1)

您的DataObj班级必须采用NSCoding protocol进行归档。看看Encoding and Decoding Objects