【问题标题】:Store custom class with core data使用核心数据存储自定义类
【发布时间】:2014-07-22 11:20:15
【问题描述】:

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

    }

在 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 来管理我的核心数据。

谢谢。

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    您的取消归档代码没有使用friends 关系。您从不查找编码数据,而是尝试直接取消归档 FriendItems 对象。在第二个代码sn -p:

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

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

    for (FriendItems i in friendsdata) {
    

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

    【讨论】:

    • 好的,现在它就像一个魅力,谢谢! (在我回到视图控制器后,它仍然没有显示在我选择的项目上,但它可能来自我将深入研究的另一个问题,至少现在它解压得很好)
    猜你喜欢
    • 2011-01-07
    • 2019-07-11
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多