在我的 iPhone 应用程序中,我有两个 plist 文件来存储“主题”。一个是包含默认主题的只读文件,一个包含用户创建的自定义主题。我正在使用 plist 文件,因为我很容易从 plist 中读取并创建新的主题对象。
我的 plist 是一个字典对象数组。
有什么简单的方法可以将新的字典对象附加到我的 plist 文件中吗?还是我需要将文件读入内存,附加新的字典对象,然后将其写回文件系统?
谢谢!
在我的 iPhone 应用程序中,我有两个 plist 文件来存储“主题”。一个是包含默认主题的只读文件,一个包含用户创建的自定义主题。我正在使用 plist 文件,因为我很容易从 plist 中读取并创建新的主题对象。
我的 plist 是一个字典对象数组。
有什么简单的方法可以将新的字典对象附加到我的 plist 文件中吗?还是我需要将文件读入内存,附加新的字典对象,然后将其写回文件系统?
谢谢!
使用 Cocoa,您需要将文件读入内存,附加新的字典对象,然后将其写回文件系统。如果您使用 XML plist,您可以很容易地解析它并逐步写入文件,但它也会更大一些,因此不太值得。
如果重写 plist 花费的时间太长,您应该使用数据库进行调查(可能通过 Core Data)。除非文件很大,否则即使 iPhone 的内存容量和闪存写入速度,我也怀疑这将是一个问题。
(我为那些不想点击我在这里回答的类似问题的链接的人复制了这个:关于如何从 plist 获取数据的问题以及它应该如何布局)
以下是使用 NSDictionary 从 plist 读取和写入值的两种方法:
- (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];
}