在我的iPhone應用程序中,我有兩個plist文件來存儲「主題」。一個是包含默認主題的只讀文件,另一個包含用戶創建的自定義主題。我使用plist文件,因爲我很容易從plist中讀取並創建新的Theme對象。如何向plist添加新項目?
我的plist是一個字典對象數組。
有什麼簡單的方法來追加一個新的字典對象到我的plist文件?或者我需要將文件讀入內存,追加新的字典對象,並將其寫回文件系統?
謝謝!
在我的iPhone應用程序中,我有兩個plist文件來存儲「主題」。一個是包含默認主題的只讀文件,另一個包含用戶創建的自定義主題。我使用plist文件,因爲我很容易從plist中讀取並創建新的Theme對象。如何向plist添加新項目?
我的plist是一個字典對象數組。
有什麼簡單的方法來追加一個新的字典對象到我的plist文件?或者我需要將文件讀入內存,追加新的字典對象,並將其寫回文件系統?
謝謝!
使用Cocoa,您需要將文件讀入內存,追加新的字典對象,並將其寫回到文件系統。如果你使用XML plist,你可以很容易地解析它並遞增地寫入文件,但它也會更大一些,所以它不太值得。
如果重寫plist的時間太長,您應該使用數據庫進行調查(可能是通過核心數據)。除非文件很大,否則即使iPhone的內存容量和閃存寫入速度仍然存在,我懷疑這是一個問題。
這將做!謝謝。 – 2009-10-19 01:26:57
請記住,您無法寫入應用程序包。你必須找到你的應用程序的文檔目錄(使用'NSSearchPathForDirectoriesInDomain()')並寫在那裏。 – 2009-10-19 01:43:09
(我複製這對於那些不想點擊從一個類似的問題,我回答這裏的鏈接誰:A question on how to Get data from plist & how should it be layout)
這裏有兩種方法來讀取和使用從plist中值寫入一個NSDictionary:
- (NSMutableDictionary*)dictionaryFromPlist {
NSString *filePath = @"myPlist.plist";
NSMutableDictionary* propertyListValues = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
return [propertyListValues autorelease];
}
- (BOOL)writeDictionaryToPlist:(NSDictionary*)plistDict{
NSString *filePath = @"myPlist.plist";
BOOL result = [plistDict writeToFile:filePath atomically:YES];
return result;
}
,然後在你的代碼塊地方:
// Read key from plist dictionary
NSDictionary *dict = [self dictionaryFromPlist];
NSString *valueToPrint = [dict objectForKey:@"Executable file"];
NSLog(@"valueToPrint: %@", valueToPrint);
// Write key to plist dictionary
NSString *key = @"Icon File";
NSString *value = @"appIcon.png";
[dict setValue:value forKey:key];
// Write new plist to file using dictionary
[self writeDictionaryToPlist:dict];
這是怎麼了追加數據到plist中:
NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
[array addObject:countdownLabel.text];
[array writeToFile:[self dataFilePath] atomically:YES];
[array release];
}
else
{
NSArray *array = [NSArray arrayWithObject:countdownLabel.text];
[array writeToFile:filePath atomically:YES];
}
這是簡單的方法。你還有什麼希望? – 2009-10-19 01:11:22
我挖通過文檔,看看我是否錯過了一些東西,比如便利方法來改變plists,因爲它們在Cocoa應用程序中被廣泛使用。猜猜不是:) – 2009-10-19 01:29:10