在我的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