2010-04-18 61 views
0

我是意大利年輕的iPhone開發者。我有一個plist文件(名爲「Frase」)這種結構:iPhone:如何寫字典對象的plist數組

Root Array 
- Item 0   Dictionary 
     Frase  String 
     Preferito Bool 
- Item 1   Dictionary 
     Frase  String 
     Preferito Bool 
- Item 2   Dictionary 
     Frase  String 
     Preferito Bool 
- Item 3   Dictionary 
     Frase  String 
     Preferito Bool 
exc. 

包含許多元素字典的數組,都是一樣的,包括「Frase」(字符串)和「Preferito」(BOOL)的。

變量「indirizzo」,增加或減少按鈕Next或Back的按鈕。應用接口:

http://img691.imageshack.us/img691/357/schermata20100418a20331.png

當我點擊AddPreferito按鈕,項目 「Preferito」 必須是YES。隨後,數組必須更新爲新的字典。代碼:

(void)addpreferito:(id)sender { 

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Frase" ofType:@"plist"]; 
MSMutableArray *frase = [[NSMutableArray alloc] initWithContentsOfFile:plistPath]; 
NSMutableDictionary *dictionary = [frase objectAtIndex:indirizzo]; 
[dictionary setValue: YES forKey:@"Preferito"]; 
[frase replaceObjectAtIndex:indirizzo withObject:dictionary]; 
[frase writeToFile:plistPath atomically:YES]; 

}

爲什麼不工作? 謝謝謝謝謝謝!

回答

0

您正在從您的應用程序包中加載您的初始plist。不幸的是,你不能寫入這個目錄。當你需要做的是檢查你的plist是否已經存在於用戶文檔目錄中。如果有,請從此處加載。否則,從應用程序包內加載您的模板(原始)。在寫回文件時,必須始終將其寫入用戶文檔目錄。

有關管理應用程序文件的更多信息,請參閱iPhone Application Programming GuideFiles and Data Management部分。

1

傑森說什麼是正確的,但它看起來像有一個在你的代碼另一個更嚴重的問題:看來你傳遞一個原始值(定義的常量)作爲第一個參數-setValue:forKey:,這期望類型爲id的參數(換句話說,一個對象,而不是一個原語)。

相反,你可以使用NSNumber一個實例來包裝布爾值,然後把它在陣列中,像這樣:

[dictionary setValue:[NSNumber numberWithBool:YES] forKey:@"Preferito"];