2010-03-11 4 views
1

У меня есть один словарь, который нужно сохранить в plist. PaletteDictionary всегда возвращает ноль:Сохранение единого NSMutableDictionary в plist

- (void)saveUserPalette:(id) sender 
{ 
    [paletteDictionary setObject:matchedPaletteColor1Array forKey:@"1"]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"]; 
    // write plist to disk 
    [paletteDictionary writeToFile:path atomically:YES];  
} 

Я читаю данные обратно в другое представление, как:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"]; 

NSMutableDictionary *plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:path]; 
if(plistDictionary==nil){ 
    NSLog(@"failed to retrieve dictionary from disk"); 
} 
+0

И какая ошибка? Код выглядит нормально. –

+0

Нет ошибки, но plistDictionary остается без регистрации журнала ошибок «не удалось извлечь словарь с диска». – yesimarobot

+0

Можете ли вы изменить свой вопрос, чтобы упомянуть об этом? –

ответ

1

Запустите приложение в симуляторе и перейдите по следующему пути:

~/Library/Application Support/iPhone Simulator/User/Applications/{GUID}/Documents

Где GUID будет такой строкой: 06430A38-AFAC-4C68-8F39-DBD6C81A5AA6 (вероятно, это папка Last Modified).

Убедитесь, что присутствует UserPaletteData.plist и загрузите его в Список свойств Editor.app, чтобы убедиться, что он содержит некоторые данные.

Кроме того, убедитесь, что в вашем словаре используются только следующие типы данных, иначе он не будет записываться в plist: (NSData, NSDate, NSNumber, NSString, NSArray или NSDictionary).

Чтобы убедиться, что словарь вы пытаетесь сохранить на диск действует для PLIST, попробуйте следующее:

for (id key in paletteDictionary) 
{ 
    NSLog(@"key: %@, value: %@, class: %@", key, [paletteDictionary objectForKey:key], NSStringFromClass([[paletteDictionary objectForKey:key] class])); 
} 

Это должно сказать вам, если любой из ваших объектов являются неправильным типом данных для списка свойств ,

Если это все еще не помогает, вы должны убедиться, что paletteDictionary был назначен/init'ed перед вызовом saveUserPalette.

+0

UserPaletteData.plist не существует. – yesimarobot

+0

Я также проверил соответствиеPaletteColor1Array и работает. – yesimarobot

+0

Попробуйте обновленные инструкции, чтобы найти виновника. –

0

Убедитесь, что вы выделяете (alloc/init) палитруDictionary перед ее использованием.

2

Можете ли вы упомянуть, какой объект является «сопоставленPaletteColor1Array». Я считаю, что это некий пользовательский объект класса. Насколько мне известно, записываемые объекты должны соответствовать NSCoding, которые NSString, NSDate и т. Д. Уже есть. Поэтому в заданном коде установка «matchedPaletteColor1Array» будет работать как некоторая строка.

Вы можете посмотреть следующее сообщение, чтобы включить объект NSCoding. objects conforming to nscoding will not writetofile