Я пытаюсь реализовать функциональность «Добавить в избранное», используя NSMutableDictionary, поскольку мне нужно добавить несколько ключевых значений. Следующий метод addToFavourites всегда отображает Count = 0 даже после добавления объекта в словарь. Я прочитал this и получил nsdefaults в mutabledictionary (вместо изменяемого массива) и установил верный словарь обратно в nsdefaults, но не уверен, в чем проблема. Любая помощь могла бы быть полезна. Спасибо.iPhone: не удалось сохранить NSMutableDictionary в NSUserDefaults
Отредактировано: От this Я пришел к пониманию, что мне нужно перемещать данные вокруг изменяемого и неизменяемого словаря, а затем он отлично работает! но все еще не в состоянии синхронизировать модифицированный NSMutableDictionary с NSUserDefaults.
-(BOOL)isAddedToFavorites:(NSString*)viewID {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *favourites = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy];
if(favourites && [[favourites objectForKey:kFavouriteItemsKey] objectForKey:viewID])
return YES;
return NO;
}
-(void)addToFavourites:(NSString*)viewID viewType:(NSString*)viewType {
NSMutableDictionary *myMutableDictionary= [NSMutableDictionary dictionaryWithCapacity:[myDictionary count]+1];
[myMutableDictionary addEntriesFromDictionary:myDictionary];
[myMutableDictionary setObject:myObject forKey:myKey];
// Modified dictionary is not getting synced
[[NSUserDefaults standardUserDefaults] setObject:myMutableDictionary forKey:kFavouriteItemsKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
Пробовал кодирование данных словаря в NSData, и теперь он работал после незначительных, но серьезных исправлений!
-(BOOL)isAddedToFavorites:(NSString*)viewID {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:kFavouriteItemsKey];
NSDictionary *favourites = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if(favourites && [favourites objectForKey:viewID])
return YES;
return NO;
}
-(void)addToFavourites:(NSString*)viewID viewType:(NSString*)viewType {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:kFavouriteItemsKey];
NSDictionary *myDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSMutableDictionary *myMutableDictionary= [NSMutableDictionary dictionaryWithCapacity:[myDictionary count]+1];
[myMutableDictionary addEntriesFromDictionary:myDictionary];
[myMutableDictionary setObject:viewType forKey:viewID];
NSData *newdata = [NSKeyedArchiver archivedDataWithRootObject:myMutableDictionary];
[[NSUserDefaults standardUserDefaults] setObject:newdata forKey:kFavouriteItemsKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
Спасибо.
Этот http://stackoverflow.com/questions/471830/why-nsuserdefaults-failed-to-save-nsmutabledictionary-in-iphone-sdk представляется дубликатом. Помогает ли это? – phi
Это выглядит по-разному. AppleDeveloper хранит строки и все еще имеет проблему. – Joe
@Irene: Я пробовал значения словаря кодировки, но все равно он не работает! См. Отредактированный вопрос! – applefreak