2009-12-09 28 views
1

我正在使用類似下面的代碼將對象的NSDictionary保存到設備。有沒有辦法打開這個檔案,深入到它包含的詞典項目,理想,編輯數據?我的猜測是不,不可靠,因爲保存時所做的優化會導致歸檔難以解釋...至少在用類似屬性列表編輯器打開時似乎是這樣。例如,如果我的一些對象共享一個類似的NSString,那麼看起來NSString只會被存檔一次...改變了我所期望的NSDictionary的結構。可能可靠地打開並編輯NSKeyedArchiver的存檔?

- (BOOL)writeDataToFile { 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:myDictionary forKey:kDataKey]; 
[archiver encodeInteger:kDataFileVersion forKey:kDataVersionKey]; 
[archiver finishEncoding]; 
BOOL success = [data writeToFile:[self dataFilePath] atomically:YES]; 
[archiver release]; 
[data release]; 
return success; 
} 

回答

1

真正的問題是「你應該嗎?」 ... 可能不會。

當然,你可以解析文件格式,但該格式是一個實現細節,可能更改,它是不值得的。

你爲什麼要這麼做?你是否正在嘗試增量編輯la Core Data + sqlite?只是普通的舊sqlite本身能解決你的問題嗎?

+0

我只是好奇,如果我可能忽視或不知道某些* thing *或某些*工具*可以解析這些文件。爲什麼?主要是爲了測試應用程序對歸檔中不同類型數據的響應。沒有任何與CD或SQLite相關的東西。 – Meltemi

+0

這對於一個有效的請求來說是一個相當無益的答案。例如,我需要比較這樣一個plist文件的兩個版本(即由Xcode的Core Data模式編輯器創建的「佈局」和「元素」文件。在這種情況下,比較原始plist文件,即使轉換爲文本編輯器,效果不好,因爲即使模型只有很小的變化,許多ID可能已經改變了,我需要看到這些已存檔對象的對象佈局,以便告訴我們改變了什麼樣的東西 –

+0

事實上仍然是實際的內部這些文件的編碼是一個實現細節,可以從一個操作系統版本轉換到另一個操作系統版本,這不太可能,但是嘗試手動解析它並不是一個好主意,而且完全愚蠢的試圖再次寫出它。數據結構和它的鍵的名字提前有一個機會做這個安全的事情,即使如此,取消存檔的* real *類可能會在內部做一些事情來爲類的早期版本創建存檔。理念。** –

相關問題