2011-05-03 25 views
0

我想保存屬性列表中的對象數組。 我用這個方法來完成它:將數據保存在屬性列表中

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第四對象是圖像,我不能把它保存在一個屬性列表,對於這個問題的任何解決方案?

回答

0

如果您使用的是imageNamed,那麼我假設圖像位於您的主包中,在這種情況下,我會將圖像名稱放在plist中,並在讀取它時再次使用imageNamed:。

另一種選擇是將圖像轉換爲可編碼的東西,如NSData對象。當您重新讀取屬性列表時,將數據轉換回UIImage。

看看 UIImagePNGRepresentation

-initWithData:

+0

在第一個解決方案中存在的圖片不在主包和用戶添加它們的問題,所以我想將此圖片保存在屬性列表中,所以解決方案中使用nsdata? – yosifz8 2011-05-03 21:52:39

+0

如果圖像不在主包中,那麼imageNamed會出現一些問題:根據文檔 - 「文件的名稱。如果這是第一次加載圖像,該方法看起來像在應用程序的主包中具有指定名稱的圖像。「 – 2011-05-03 21:55:34

0

將圖像寫入應用程序文檔目錄中的文件,並將圖像的文件名或文件路徑保存到屬性列表中。

1

在保存之前,您需要將UIImage轉換爲NSData。

NSData *data = UIImagePNGRepresentation(img); 

更新:請參閱answer以獲得更強大的解決方案。

+0

錯誤對不起... – yosifz8 2011-05-03 22:03:18

0

你把DataObj對象到數組您再試圖挽救是plist。 Plist文件不能包含任意對象,所以這不起作用。

圖像是你的第二個問題。