2013-10-04 2 views
1

NSUserDefaults 키 아래에 값 집합을 저장하려고합니다. 맞춤 클래스를 사용하여 RSS 피드에 액세스하고 클래스 변수를 피드의 정보와 일치하도록 설정합니다. 나는 다음 NSUserDefaults 키 아래에 값을 설정하는 다른 클래스를 사용NSUserDefaults를 사용하여 컨테이너 클래스를 저장하는 방법

[NSUserDefaults의 setObject : forKey :] : 시도

[infoStorageClass dataIsNew:self]; 
[infoStorageClass storeData:self]; 

문제는 내가 내 수업을 저장할 때마다 나는이 경고를 얻을 수 있다는 것입니다 클래스 '__NSArrayM'의 비 속성 값 '( "TARSSInfo : 0x80eb6a0" )을 삽입 할 수 없습니다. 속성 목록의 사전과 배열에는 속성 값만 포함해야합니다.

여기 어떻게됩니까? 도움을 주셔서 미리 감사드립니다.

답변

2

:

기본 객체는 속성 목록이 있어야합니다, 즉, (의 인스턴스의 조합 또는 모음)의 인스턴스 :있는 NSData,있는 NSString,의 NSNumber,있는 NSDate, NSArray를, 또는있는 NSDictionary.

다른 유형의 객체를 저장하려면 먼저 저장할 객체의 클래스에 NSCoding 프로토콜을 구현해야합니다. 어느 (사용자 정의 클래스 BMDifficultyLevel 내 자신의 코드 스 니펫)이 메소드를 구현하고 같이 디코딩 및 인코딩을 의미

을 :
- (id)initWithCoder:(NSCoder *)decoder { 
if (self = [super init]) { 
    _difficultyLevel = [decoder decodeObjectForKey:@"difficulty"]; 
    _difficultyLevelType = [decoder decodeIntegerForKey:@"type"]; 
} 
return self; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder { 
[encoder encodeObject:_difficultyLevel forKey:@"difficulty"]; 
[encoder encodeInteger:_difficultyLevelType forKey:@"type"]; 
} 

다음 개체를 저장하기 전에이 같은 저장 한 후 보관하고 필요

NSUserDefaults *defaults = [[NSUserDefaults alloc] init]; 
_defaultsDataWithLevelObject = [NSKeyedArchiver archivedDataWithRootObject:_difficultyLevel]; 
[defaults setObject:_defaultsDataWithLevelObject forKey:BMDifficultyLevelDefaultsKey]; 

여기서 _defaultsDataWithLevelObject은 NSData 유형의 객체이며, 결국 NSData 객체를 저장합니다. 이 답변에 대한

_defaultsDataWithLevelObject = [[NSUserDefaults standardUserDefaults] objectForKey:BMDifficultyLevelDefaultsKey]; 
    _difficultyLevel = [NSKeyedUnarchiver unarchiveObjectWithData:_defaultsDataWithLevelObject]; 
+0

확인 감사합니다 :

는이 같은 객체 뭔가를 보관 해제해야합니다 귀하의 기본값을 검색 할 수 있습니다. 내 값을 배열에 저장 한 다음 저장하는 것이 더 쉬울 수도 있다고 생각합니다. – 68cherries

+0

나는 모든 값 (NSDate, 2 NSNumbers, CLLocation)을 NSDictionary에 저장했다. NSDefaults에 저장하는 NSMutable 배열에 저장한다. 같은 오류가 발생합니다. : { – 68cherries

1

사용자 지정 클래스에 NSCoding 프로토콜을 구현 한 다음 인스턴스 배열을 보관해야합니다. 그러면 사용자 기본값으로 저장할 수있는 NSData 인스턴스가 생깁니다. 문서에서

관련 문제