ios - 将 Mantle 与核心数据一起使用 - NSSet 和 NSArray

标签 ios objective-c core-data github-mantle

我需要你的帮助,因为我无法解决这个问题。我正在使用 Mantle与 iOS 中的 CoreData 一起使用。

我定义的关系如下所示:

发表 1:N 条评论

当我从我的 REST 服务中提取数据时,我创建了一个 Mantle 对象帖子,其中包含一个 NSMutableArray of Comments。这完美无缺。

然后我将它存储在核心数据中,这是我不知道我做的事情是否正确的地方。

[MTLManagedObjectAdapter managedObjectFromModel:post insertingIntoContext:[self getManagedObjectContext] error:&error];

所以我这样做是为了将我的帖子对象存储到核心数据中。核心数据模型有一个名为“post_has_comments”的关系,这是一个级联的一对多关系。所以在对象 Post 上,我有“posts_has_comments”-> 级联,在我的对象“Comment”上,我与“Nullify”有一对一的关系。

Afaik,Core Data 将其视为 NSSet。不过,我要放入的是一个 NSMutableArray,因为 Mantle 会处理这个(至少快速浏览一下它的源代码是这样告诉我的)。

不幸的是,当我使用

从 Core Data 取回对象时
Post* post = [MTLManagedObjectAdapter modelOfClass:Post.class fromManagedObject:[[self fetchedResultsController] objectAtIndexPath:indexPath] error:nil];

post 对象的属性 comments 是一个空的 NSSet,我在预先插入这个东西时遇到了很多错误。我得到的错误:

Core Data: annotation: repairing missing delete propagation for to-many relationship post_has_comments on object [...]

我卡住了 - 也许我在这里遗漏了一些重要的东西?

我的 Post 类实现了以下静态方法:

+ (NSDictionary *)managedObjectKeysByPropertyKey {
return @{
         @"post_id" : @"id",
         @"comments" : @"post_has_comments"
         };
}

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
             @"post_id" : @"id",
             };
}

+ (NSDictionary *)relationshipModelClassesByPropertyKey {
    return @{
             @"comments" : IHComment.class
             };
}

最佳答案

一个简单的解决方法是编写您自己的属性 setter 方法,如果设置的值为 NSSet 然后将其转换为 NSMutableArray,然后再将其设置回您的属性 伊娃

例如:

- (void)setComments:(NSMutableArray *)comments {
    if ([comments isKindOfClass:NSSet.class]) {
        _comments = [NSMutableArray arrayWithArray:[((NSSet *)comments) allObjects]];
    } else {
        _comments = comments;
    }
}

我自己做过很多次,效果非常好!

关于ios - 将 Mantle 与核心数据一起使用 - NSSet 和 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21042163/

相关文章:

iphone - 我需要学习什么才能完成 iPhone 的 3D 赛车游戏?我需要什么工具?

ios - 更新 CoreData 对象而不是插入新对象

objective-c - 使用 nsfetchedresultscontroller 时,数据不会在 uitableview 中自动重新加载

iphone - NSPredicate使用OR错误

ios - 如何存储在 .plist 文件中解析的 JSON?

iphone - -[__NSPlaceholderArray initWithObjects :count:]: attempt to insert nil object from objects[0]'

objective-c - 在 Objective-C 中获取 FileTime 结构中的当前日期时间

ios - 如何根据点击的表格单元格更改目标 View Controller 的内容?

ios - 应用转换 : Assertion failure in -[layoutSublayersOfLayer:] 时自动布局崩溃

iphone - 从 subview 使用 presentModalViewController