2012-07-07 44 views
0

我試圖更改對象屬性的值(從.plist取消存檔),並且它似乎不工作......我試圖出了什麼錯了一段時間了,我真的很感激任何幫助。對象屬性的更改值不適用於使用NSKeyedUnarchiver創建的對象

驗證碼:

NSArray * pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString * pathToSave = [[pathArray objectAtIndex:0] stringByAppendingPathComponent:@"ownProfileArchive"]; 
OwnProfileData * OwnProfile = [NSKeyedUnarchiver unarchiveObjectWithFile:pathToSave]; 
[OwnProfile setName:[NameField text]]; // at that point, even if I change the name to a string saying "Hello!", It would always be NULL! 
NSLog(@"Name = %@", [OwnProfile Name]); // Here I can see it is always null. 
[NSKeyedArchiver archiveRootObject:OwnProfile toFile:pathToSave]; 

現在,我第一次這樣運行,這是可能沒有在指定的路徑下的文件,我假定應用程序「不介意」,因爲文檔說NSKeyedArchiver將創建一個文件,如果沒有一個存在。問題是:如果沒有文件,Will創建對象(NSKeyedUnarchiver)的代碼將創建一個功能對象,因爲它確實返回值'NULL',但我無法更改它...如果一個文件存在,檢查文件是否存在,如果不存在,創建一個文件的代碼是什麼? (我想會有一個If-Else條件涉及,但我不知道條件是什麼以及如何創建一個新文件...)。

回答

0

我敢打賭問題是,如果文件不存在,那麼我懷疑你沒有得到OwnProfileData的實際實例,因此OwnProfile爲零。檢查零,並在這種情況下創建一個新的實例(可以添加到您的檔案,以備將來使用)。

Objective-C允許發送消息到零,所以這樣的東西很難看到。嘗試使用NSLogging OwnProfile並查看!

+0

乾杯幫了我很多......真的很難調試那種有工作人員。 – byteSlayer 2012-07-07 19:11:49

+0

嗨,我已經嘗試編寫代碼來檢查文件是否存在,看起來像這樣:BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:pathToSave];現在事情是,它永遠是真的!它返回true,然後繼續從存檔中創建對象,但之後它會像以前一樣返回null,即使根據文件管理器存在一個文件。於是我繼續檢查了我的項目的「文檔」文件夾,並驚喜地發現,沒有任何文件。那麼你有什麼建議嗎?如果不是,是否可以自己創建一個文件並讓它始終在那裏? – byteSlayer 2012-07-07 19:27:09

+0

您是否檢查過pathToSave變量,並對其進行了完整性檢查?最後一次,我發現自己的大腦存在着關於文件的問題,我正在查看錯誤的模擬器的文檔文件夾(即,文件存在於我的5.0中,但不是我的5.1,應用程序在5.0上運行,我在5.1中查找)... ...用於創建您自己的文件;你絕對可以這樣做:-)但這可能是另一個SO問題;-) – 2012-07-07 19:36:33

相關問題