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

标签 ios objective-c core-data

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

相关文章:

c# - 如何实现一个可编辑的 UITableView,类似于 Safari Bookmarks?

objective-c - ARC 是否跟踪 [NSString UTF8String] 生成的 const char* ?

iphone - 设置扑克牌值(value)

ios - 将数据保存到另一个用户对象

ios - 委托(delegate)和回调不适用于传递模型数据

iphone - 如何使用 CoreGraphics 将渐变应用于饼图的扇形弧

ios - 为什么 AVAudioSessionMediaServicesWereResetNotification 经常发生(iOS 10)?

ios - 在 CoreData 表中插入 50 个对象

objective-c - 添加新的核心数据模型版本后出错

ios - ResKit : temporary NSManagedObjects