如何将新项目附加到plist?

时间:2009-10-19 01:07:26

标签: iphone objective-c xml cocoa-touch plist

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

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

有没有简单的方法将新的字典对象附加到我的plist文件?或者我是否需要将文件读入内存,附加新的字典对象,并将其写回文件系统?

谢谢!

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

(我为那些不想点击我在这里回答的类似问题的链接的人复制了此内容:A question on how to Get data from plist & how should it be layout

以下是使用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];

答案 2 :(得分: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];
}