2011-07-06 6 views
2

여러 개의 키 - 값을 추가해야하므로 NSMutableDictionary를 사용하여 "즐겨 찾기에 추가"기능을 구현하려고합니다. 다음 addToFavourites 메서드는 사전에 객체를 추가 한 후에도 항상 Count = 0을 표시합니다. this을 읽고 nsdefaults를 mutableictionary (변경 가능한 배열 대신)로 가져 와서 결과 사전을 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]; 
} 

감사합니다.

+1

This http://stackoverflow.com/questions/471830/why-nsuserdefaults-failed-to-save-nsmutabledictionary-in-iphone-sdk는 중복 된 것으로 보입니다. 도움이 되나요? – phi

+0

이것은 실제로 AppleDeveloper가 문자열을 저장하고 있고 여전히 문제가있는 것처럼 보입니다. – Joe

+0

@ 아이랜드 : 사전 값을 인코딩하려고했지만 여전히 작동하지 않습니다! 편집 된 질문보기! 인코딩 사전의 – applefreak

답변

2

당신은 당신의 사전에있는 요소에 대해이를 구현해야합니다은 :

사전의 요소는, CommentItem의 구현에 그런

@interface CommentItem : NSObject<NSCoding> { 
    NSString *value; 
} 

를 구현하는 두 가지 방법을 제공합니다

-(void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:value forKey:@"Value"]; 
} 

-(id)initWithCoder:(NSCoder *)decoder 
{ 
    self.value = [decoder decodeObjectForKey:@"Value"]; 
    return self; 
} 

@Irene 제공 링크에 제안되어 있습니다.

+0

오스카모 (OscarMk), 그건 내가 이해하지 못했던 것들이었습니다. 나는 언제 어떻게 이러한 방법들이 시행 될지 모른다. 이유없이 확실하게 작동하지 않는 이유는 무엇입니까? 두 번째 키를 추가 할 때 작은 문제가 있습니다. 내 Xcode가 매달려 있습니다! 그것 때문인지는 모르지만 그것을 해결하려고 노력하십시오. 편집 된 질문에서 전체 코드보기 감사. – applefreak

+1

@AppleDeveloper nsdictionary의 객체가 이미 NSCoding을 구현하지 않은 경우 위의 코드 만 필요하지만 작동하면 구현 한 것입니다. NSKeyedArchiver를 호출하여 아카이브를 해제하고 보관할 수 있습니다. –

+0

환상적! 모든 것을 도와 준 OscarMk 대단히 감사합니다! 지금은 아무 문제가 없습니다. Xcode 편집기가 다른 이유로 인해 멈춘 것일 수 있습니다. – applefreak

관련 문제