Ios 使用核心数据存储自定义类

Ios 使用核心数据存储自定义类,ios,objective-c,core-data,Ios,Objective C,Core Data,我正在尝试使用核心数据存储自定义类型的数据。 我的类(friendItem)有一个NSData类型的属性(friend)来存储它 将KNSelectorItem类型的数组中的每个元素归档到NSData后,我将它们作为“朋友”存储在friendItem中。但是,当我想取消对数组中的每个元素的归档以将信息作为KNSelectorItem对象读取时,会出现以下错误: -[FriendItems bytes]:发送到实例0x10a637dc0的无法识别的选择器 可能有帮助的代码: HomeViewCon

我正在尝试使用核心数据存储自定义类型的数据。 我的类(friendItem)有一个NSData类型的属性(friend)来存储它

将KNSelectorItem类型的数组中的每个元素归档到NSData后,我将它们作为“朋友”存储在friendItem中。但是,当我想取消对数组中的每个元素的归档以将信息作为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;
     }];

    }
    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

好的,现在它就像一个符咒,谢谢!(在我返回视图控制器后,它仍然不会显示在我选择的项目上,但它可能来自另一个我将深入研究的问题,至少现在它没有归档)