2012-02-01 57 views
1

我終於設法使用NSCoding和plist文件保存我的數據。 但是,解決方案(由各種教程拼湊而成)使用Archiver,因此生成的plist文件是二進制文件。使用Archiver保存Plist數據與創建可讀(xml)文件

我想將數據保存在文本/可讀plist xml文件中(至少出於測試目的),因爲我可以讀取它。

如何更改我的代碼來執行此操作?

我的「encodeWithCoder」和「initWithCoder」方法在我的類名稱中。

我的AppDelegate使用該保存其中 「allMsgs」 是類實例的數組中的數據:

NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:allMsgs]; [encodedObject writeToFile:plistPath atomically:YES];

的AppDelegate中使用此來讀取數據:

NSData *codedData = [[NSData alloc] initWithContentsOfFile:plistPath]; if(codedData!=nil){ allMsgs = [NSKeyedUnarchiver unarchiveObjectWithData:codedData]; }

+0

您希望將字典('NSDictionary')保存到磁盤而不是保存'NSData'。 – 2012-02-01 21:36:11

+0

@ sudorm-rf不確定你的意思。你的意思是「allMsgs」必須是Dictionary類型,還是你的意思是「encodedObject」必須是Type Dictionary? – wayneh 2012-02-01 21:38:34

+0

什麼類型的數據具有allMsgs變量? – 2012-02-01 21:39:14

回答

0

下面是如何將數據保存在plist中的示例:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
NSString *docFilePath = [documentsDirstringByAppendingPathComponent:@"UserSettings.plist"]; 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:0]; 

// add the data to dict here 
[dict setObject:allMsgs forKey:@"allMsgsKey"]; 

// save the data as plist 
[dict writeToFile:docFilePath atomically:YES]; 
[dict release]; 

由於plist實際上是由NSDictionary表示的,因此您的數據必須能夠存儲在字典中。

+0

這並沒有保存任何東西。我認爲問題是allMsgs中包含的數據是包含int,BOOL,NSString和UIColor的類實例數據。我很確定它必須使用NSCoding進行處理。 – wayneh 2012-02-01 22:13:12

+0

plist只能存儲objective-c數據類型,而不是自定義類。因此,如果您希望將數據保存在plist中,則可以將其保存在NSData對象中,但這對您的情況無效(您想要讀取plist數據) – 2012-02-01 22:29:35

+0

新奇怪 - 我又回到了使用Archiver,並且當我在Finder中找到plist文件並選中它時,我在Finder窗口中獲得了XML預覽!我可以使用查找器中的'QuickLook'來查看XML ... – wayneh 2012-02-01 22:35:37