2013-04-25 3 views
0

테이블에 문제가 있습니다!NSMutableArray in NSUserDefault

파싱 테이블 뷰를 사용하지만 뷰를 변경하면 테이블의 데이터가 손실됩니다. 그래서 모든 데이터를 nsuserdefault에 저장하기로 결정했습니다. 그러나 여기서 문제는 NSUserDefault가 나를 경고합니다 : "속성 목록의 사전과 배열은 속성 값만 포함해야합니다."

NB : itemsToDisplay는 NSMutableArray이며 parsedItems의 제목, URL, 데이터 및 요약을 포함합니다.

음, 여기 내 코드 :

self.itemsToDisplay = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"items"] mutableCopy]; 

if (!self.itemsToDisplay) { 
    self.itemsToDisplay = [[NSMutableArray alloc] init]; 
} 

self.itemsToDisplay = [[NSMutableArray alloc]init]; 

self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors: 
         [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date" 
                      ascending:NO] autorelease]]]; 


[[NSUserDefaults standardUserDefaults] setObject:self.itemsToDisplay forKey:@"items"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

나는 문제가 setObject를 가정하자 : self.itemsToDisplay,하지만 난 그것을 해결 방법을 모르겠어요.

답변

1

첫째는 사용자 데이터를 보유하지 않기 때문에 테이블 데이터가 손실 될 수 없다고 말할 수 있습니다 .. 너희들을 감사드립니다. 데이터는 바인딩을 통해 또는 위임을 통해 제공됩니다 (Apple 설명서의 NSTableViewDataSource 참조).

두 번째로, self.itemsToDisplay에 대한 처음 세 할당은 마지막 할당으로 모두 덮어 쓰기 때문에 아무런 용도가 없습니다 (설정자에 부작용이없는 한).

마지막으로이 코드가 이미 대리인에 있으면 대리자를 NIB 파일에서 인스턴스화해야 데이터가보기 스왑을 통과 할 수 있습니다. 위임자가보기로 인스턴스화 된 객체 인 경우 모든 데이터와 함께 해당 객체와 함께 사라지고 사용자 기본값에 대한 쓰기가 달성하려는 작업에 대한 나쁜 생각입니다. 수명이 두 뷰의 수명보다 긴 객체에 대리자를 설정하기 만하면됩니다.

+0

해결 된 문제 : D – arcangel06

0
self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors: 
         [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date" 
                      ascending:NO] autorelease]]]; 

//First lets encode it 
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults]; 
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:self.itemsToDisplay]; 
[userDefault setObject:myEncodedObject forKey:[NSString stringWithFormat:@"sample"]]; 
관련 문제