5

在我的 iPhone 应用程序中,我有两个 plist 文件来存储“主题”。一个是包含默认主题的只读文件,一个包含用户创建的自定义主题。我正在使用 plist 文件,因为我很容易从 plist 中读取并创建新的主题对象。

我的 plist 是一个字典对象数组。

有什么简单的方法可以将新的字典对象附加到我的 plist 文件中吗?还是我需要将文件读入内存,附加新的字典对象,然后将其写回文件系统?

谢谢!

4

3 回答 3

5

使用 Cocoa,您需要将文件读入内存,附加新的字典对象,然后将其写回文件系统。如果您使用 XML plist,您可以很容易地解析它并逐步写入文件,但它也会更大一些,因此不太值得。

如果重写 plist 花费的时间太长,您应该使用数据库进行调查(可能通过 Core Data)。除非文件很大,否则即使 iPhone 的内存容量和闪存写入速度,我也怀疑这将是一个问题。

于 2009-10-19T01:11:57.357 回答
3

(我为那些不想点击我在这里回答的类似问题的链接的人复制了这个:关于如何从 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];
于 2009-10-24T06:26:51.180 回答
3

这就是我将数据附加到 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];
}
于 2010-08-20T16:37:08.993 回答