2017-09-25 5 views
0

NSUserDefault에 배열 배열을 저장하지 않고 저장하려고합니다. 시도 전에 배열을 로그 아웃 할 때 객체가 가득 찼습니다. 그러나 NSUserDefault 로그 아웃하려고하면 NULL입니다. 누구든지 내가 잘못하고있는 것을 볼 수 있습니까? 제안 해 주셔서 감사합니다.IOS/Objective-C : 사용자 지정 배열을 NSUserDefault로 저장하십시오.

Items *myItems = [mutableFetchedObjects mutableCopy]; 
    NSLog(@"my Items%@",myItems);//LOGS OUT LONG LIST OF ITEMS 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myItems]; 
    [currentDefaults setObject:data forKey:@"myItems"]; 
[currentDefaults synchronize]; 
    Items *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"myItems"] mutableCopy]; 
    NSLog(@"my Retrieved Items%@",myRetrievedItems); //LOGS OUT AS NULL 
+1

왜 'arrayForKey'를 사용하고 있습니까? 데이터를 검색하고 보관 취소해야합니다. – Paulw11

+0

확실하지 않지만 NULL을 표시하는 경우에도 동일한 개체를 로깅하고 있습니까? –

답변

1

다른 답변은 언급 한 배열이 NSDictionary 유형 (문자열, 바이너리, 부울 등)을 따르지 않기 때문입니다. 배열 구성원은 사용자 정의 유형이므로 저장 할 수 없습니다. 당신이해야 할 일은 먼저 배열을 바이너리로 변환 한 다음 저장하는 것입니다.

1

데이터를 되 찾을 때 먼저 데이터를 보관 취소해야합니다. 데이터에 직접 액세스하고 있습니다. 이것은 작동하지 않습니다. 당신은 당신이 데이터

NSData *dataObj = [currentDefaults objectForKey:@"myItems"]; 

Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj]; 

를 아카이브하는 그에게 비슷한 방법으로 작업을 수행 할 수 있습니다 더 참고로, 당신이 도움이 answer.

희망을 고려할 수 있습니다. 감사합니다.

+0

[항목 initWithCoder :] : 인식 할 수없는 선택자가 인스턴스 – user6631314

+1

@user6631314로 iGenio에서 언급 한대로 전송되었습니다. 이는 클래스가 NSCoding 프로토콜을 준수하지 않았기 때문일 수 있습니다. 다음과 같이 할 수 있습니다. https://stackoverflow.com/a/6696735/3824808 –

0

액세스 가치 방법이 잘못되었습니다.

당신은 다음 코드에서 배열을 얻을 수 있습니다 :

항목 * myRetrievedItems = [[[NSUserDefaults standardUserDefaults] objectForKey : "myItems"@] mutableCopy];

관련 문제