2013-01-05 2 views
-1

가능한 중복 :
Saving UIColor to and loading from NSUserDefaults사용자 기본값에 UIColor를 입력하는 방법은 무엇입니까?

나는, 사용자 기본 설정을 초기화하기는 NSDictionary, 입력 데이터 및 refisterDefaults을 생각합니다. 하지만이 코드에는 오류가 있습니다.

//if UserFilter entry is nothing, create. 
NSDictionary *defaultFilter = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"UserFilter"]; 
[userDefaults registerDefaults:defaultFilter]; 

//if UserBadgeColor entry is nothing, create. 
UIColor *color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; 
NSValue *valColor = [NSValue value:&color withObjCType:@encode(UIColor)]; 
NSDictionary *defaultBadgeColor = [NSDictionary dictionaryWithObject:valColor forKey:@"UserBadgeColor"]; 
[userDefaults registerDefaults:defaultBadgeColor]; 

실행 중이면 UserFilter 부분에는 아무런 문제가 없습니다. 그러나 UserBadgeFilter 부분에 오류가 있습니다. 오류 라인은 마지막입니다.

감사합니다.

+0

마지막 줄에는 "EXC_BREAKPOINT (코드 = EXC_I386_BPT, subcode = 0x0) –

+0

이 있습니다. 개체는 NSData, NSString, NSNumber, NSDate, NSArray 또는 NSDictionary의 인스턴스 (또는 컬렉션의 인스턴스 조합) 여야합니다. 그 NSValue는 허용되지 않습니다. – zaph

답변

1
설명서에서

:

NSUserDefaults 클래스는 수레와 같은 일반적인 유형에 액세스하기위한 편리한 방법을 제공는, 정수, 부울 및 URL을 두 배로. 기본 객체는 NSData, NSString, NSNumber, NSDate, NSArray 또는 NSDictionary의 인스턴스 (또는 컬렉션의 인스턴스 조합) 인 속성 목록이어야합니다. 다른 유형의 객체를 저장하려면 일반적으로 객체 유형을 저장하여 NSData의 인스턴스를 만들어야합니다.

그러나 단순히있는 NSData을 사용할 수 있습니다, 귀하의 경우 너무 :

UIColor *color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; 
NSData* colorData= [NSKeyedArchiver archivedDataWithRootObject: color]; 
NSDictionary *defaultBadgeColor = [NSDictionary dictionaryWithObject: colorData forKey:@"UserBadgeColor"]; 
[userDefaults registerDefaults:defaultBadgeColor]; 

그리고 당신은 기본값에서 읽을 때, NSKeyedUnarchiver를 사용 UIColor에 데이터를 다시 디코딩.

+0

정말 고마워요! –

관련 문제