我正在尝试使用核心数据存储自定义类型的数据。 我的类 (friendItem) 有一个 NSData 类型的属性 (friend),用于存储它。
在将我的 KNSelectorItem 类型数组的每个元素归档到 NSData 之后,我将它们作为“ friend ”存储在 friendItem 中。但是,当我想取消存档我的数组的每个元素以将信息读取为 KNSelectorItem 对象时,我收到此错误:
-[FriendItems bytes]: unrecognized selector sent to instance 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管理我的核心数据。
谢谢。
最佳答案
您的解档代码没有使用 friend
关系。您从不查找编码数据,而是尝试直接取消归档 FriendItems
对象。在第二个代码片段中:
friendsdata
是一组FriendItems
- 您遍历该数组,这意味着
i
实际上是一个FriendItems
实例。 - 您尝试取消存档
i
,它不是NSData
,因此您会收到所看到的错误。
根据您所说的,您需要将循环更改为
for (FriendItems i in friendsdata) {
然后取消存档 i.friendsdata
而不是 i
。
关于ios - 使用核心数据存储自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24885986/