存储包含核心数据的自定义类

时间:2014-07-22 11:20:16

标签: ios objective-c core-data

我正在尝试使用核心数据存储自定义类型的数据。 我的类(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来管理我的核心数据。

感谢。

1 个答案:

答案 0 :(得分:1)

您的取消归档代码未使用friends关系。您永远不会查找编码数据,您尝试直接取消归档FriendItems对象。在第二个代码段中:

  • friendsdataFriendItems
  • 的数组
  • 您遍历该数组,这意味着i实际上是FriendItems个实例。
  • 您尝试取消归档i,这不是NSData,因此您会收到您所看到的错误。

根据您所说的内容,您需要将循环更改为

for (FriendItems i in friendsdata) {

然后取消归档i.friendsdata而不是i