: 당신의 사전이 유효하지 않은 이유 코드는 당신에게 더 많은 세부 정보를 제공, 도움이 될 수 있습니다 특별한 일을 할 필요가 없습니다.
그러나 사용자 정의 개체의 인스턴스 (예 : 사용자가 만든 클래스)가 있으면 호환 가능한 유형 (예 : NSData
)으로 변환해야합니다. 당신이 아래의 코드를 사용하여 수행 할 수 있습니다
- (id)initWithCoder:(NSCoder*)coder
- (void)encodeWithCoder:(NSCoder*)coder;
을 사전을 얻으려면 : 작동하려면이 방법
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:json];
[NSUserDefaults standardUserDefaults] setObject:data forKey:@"user"]
을, 당신은 당신이 저장하고자하는 사용자 정의 클래스에서이 두 메소드를 구현 네드 다시 NSUserDefaults (디코딩)에서 다음을 사용할 수 있습니다
NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:@"user"];
NSDictionary* json = [NSKeyedUnarchiver unarchiveObjectWithData:data];
편집
0 콘솔의 모든
This is bad...
메시지를받을 경우
json
개체가 어떤
[NSNull null]
값이 포함 된 경우
확인하려면 NSUserDefaults
for (id val in [json allValues])
{
if ([val isKindOfClass:[NSNull class]])
{
NSLog(@"This bad! NSNull should not be in the dictionary");
break;
}
}
에 당신이 당신의 삽입을하기 전에이 코드 조각을 추가, 당신은 2 개 선택이있다. 1. 위에서 설명한 보관/보관 방법을 사용하십시오. 2. 코드에서 손상되지 않는 경우 NSNull
개체를 사전의 다른 값 (예 : 빈 문자열)으로 바꿉니다.
사용자 기본값으로 방대한 'NSDictionary'를 저장하지 않는 것이 좋습니다. 사용자 기본값은 막대한 양의 데이터를 저장하는 것이 아닙니다.이 때문에'Documents' 폴더가 있습니다. – holex
그는 사전이 방대한이라고 말하지 않았다 –
@AndreiStanescu, ... 그리고 정확히 내가 사전이 방대하다고 생각하는 이유이다. – holex