핵심 데이터로 사용자 지정 유형의 데이터를 저장하려고합니다. 내 클래스 (friendItem)에는 NSData 유형의 속성 (친구)이 하나 있습니다.
KNSelectorItem 유형 배열의 모든 요소를 NSData에 보관 한 후,이를 friendItem에 "friend"로 저장합니다. 그러나 정보를 KNSelectorItem 개체로 읽기 위해 배열의 모든 요소를 보관 취소하려면 다음 오류가 발생합니다.
-[FriendItems bytes] : 인식 할 수없는 선택기가 0x10a637dc0 인스턴스로 전송되었습니다.
도움이 될 수있는 코드 :
HomeViewController.m
-(void)selector:(KNMultiItemSelector *)selector didFinishSelectionWithItems:(NSArray *)selectedItems
{
for (KNSelectorItem * i in selectedItems) {
NSLog(@"ID: %@ NAME: %@", i.selectValue, i.displayValue);
NSData *friendtosave = [NSKeyedArchiver archivedDataWithRootObject:i];
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
FriendItems *friend = [FriendItems MR_createEntityInContext:localContext];
friend.friend = friendtosave;
}];
}
HomeViewController.m의 ViewDidLoad에서
NSArray *friendsdata = [FriendItems MR_findAll];
NSLog(@"friends saved as data %@", friendsdata);
NSMutableArray *unarchievedFriends = [NSMutableArray array];
for (NSData *i in friendsdata)
{
KNSelectorItem *friendDecrypted = [NSKeyedUnarchiver unarchiveObjectWithData:i];
[unarchievedFriends addObject:friendDecrypted]; // THIS IS WHERE IT FAILS WHEN CHECKING WITH BREAKPOINTS
NSLog(@"friend decrypted : %@", friendDecrypted.displayValue);
}
내가 뭘 잘못 했어? 내가 놓친 게 무엇입니까 ?
PS : 저는 Magical Record 를 사용하여 핵심 데이터를 관리하고 있습니다.
감사.
보관 취소 코드는 friends
관계를 사용하지 않습니다 . 인코딩 된 데이터를 조회하지 않고 FriendItems
객체를 직접 보관 해제하려고합니다 . 두 번째 코드 스 니펫에서 :
friendsdata
배열입니다 FriendItems
i
실제로 FriendItems
인스턴스 임을 의미 합니다.i
이 아닌 아카이브를 취소하려고 NSData
하면 표시되는 오류가 발생합니다.당신이 말한 것에 따라 루프를 다음과 같이 변경해야합니다.
for (FriendItems i in friendsdata) {
그리고 보관을 취소 i.friendsdata
하는 대신 i
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다