2009-10-19 2 views
5

В моем приложении для iPhone у меня есть два файла plist для хранения «Темы». Один - это файл только для чтения, содержащий темы по умолчанию, и один содержит пользовательские Темы, созданные пользователем. Я использую файлы plist, потому что мне очень легко читать с plist и создавать новые объекты темы.Как добавить новый элемент в plist?

My plist - это массив объектов словаря.

Есть ли какой-либо простой способ добавить новый объект словаря в мой файл plist? Или мне нужно прочитать файл в памяти, добавить новый объект словаря и записать его обратно в файловую систему?

Спасибо!

+0

Это простой способ. На что еще надеетесь? –

+1

Я раскопал документы, чтобы узнать, не хватает ли чего-то, например, удобные методы для мутирования пластин, поскольку они настолько широко используются в приложениях Cocoa. Угадай не :) –

ответ

5

С помощью Cocoa вам необходимо прочитать файл в памяти, добавить новый объект словаря и записать его обратно в файловую систему. Если вы используете XML-plist, вы можете легко его разобрать и поэтапно записать в файл, но он также будет немного больше, так что вряд ли это того стоит.

Если переписывание plist занимает слишком много времени, вам следует исследовать его с помощью базы данных (возможно, через Core Data). Если файл не является огромным, я сомневаюсь, что это будет проблемой даже с объемом памяти iPhone и скоростью записи флэш-памяти.

+0

Что будет делать! Благодарю. –

+0

Просто помните, что вы не можете написать приложение. Вам нужно найти каталог документов вашего приложения (используйте 'NSSearchPathForDirectoriesInDomain()') и напишите его там. –

3

(я скопировал это для тех, кто не хочет, чтобы нажать на ссылку с подобным вопросом я ответил здесь: A question on how to Get data from plist & how should it be layout)

Вот два способа чтения и записи значений из списка свойств с помощью 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]; 
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]; 
} 
Смежные вопросы