Ios 使用核心数据存储自定义类
我正在尝试使用核心数据存储自定义类型的数据。 我的类(friendItem)有一个NSData类型的属性(friend)来存储它 将KNSelectorItem类型的数组中的每个元素归档到NSData后,我将它们作为“朋友”存储在friendItem中。但是,当我想取消对数组中的每个元素的归档以将信息作为KNSelectorItem对象读取时,会出现以下错误: -[FriendItems bytes]:发送到实例0x10a637dc0的无法识别的选择器 可能有帮助的代码: HomeViewController.mIos 使用核心数据存储自定义类,ios,objective-c,core-data,Ios,Objective C,Core Data,我正在尝试使用核心数据存储自定义类型的数据。 我的类(friendItem)有一个NSData类型的属性(friend)来存储它 将KNSelectorItem类型的数组中的每个元素归档到NSData后,我将它们作为“朋友”存储在friendItem中。但是,当我想取消对数组中的每个元素的归档以将信息作为KNSelectorItem对象读取时,会出现以下错误: -[FriendItems bytes]:发送到实例0x10a637dc0的无法识别的选择器 可能有帮助的代码: HomeViewCon
-(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;
}];
}
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);
}
在HomeViewController.m的ViewDidLoad中
-(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;
}];
}
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:我用它来管理我的核心数据
谢谢。您未存档的代码不会使用
朋友关系。您从不查找编码数据,而是尝试直接取消归档FriendItems
对象。在第二个代码段中:
friendsdata
是一组friendsitems
- 迭代该数组,这意味着
i
实际上是一个FriendItems
实例
- 您尝试取消归档
i
,这不是NSData
,因此您会看到错误
根据您所说的,您需要将循环更改为
for (FriendItems i in friendsdata) {
然后取消存档i.friendsdata
而不是i
好的,现在它就像一个符咒,谢谢!(在我返回视图控制器后,它仍然不会显示在我选择的项目上,但它可能来自另一个我将深入研究的问题,至少现在它没有归档)