我需要你的帮助,因为我无法理解这件事。我正在使用 地幔 与Ios中的CoreData一起。

我定义了如下的关系:

帖子1:N评论

当我从我的REST服务中提取数据时,我创建了一个Mantle Object Post,其中有一个注释的Nsmutablearray。这完美地工作。

然后我将其存储在Core Data中,这就是我不知道我是否做对了事情的地方。

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

所以我这样做是为了将我的post对象存储到核心数据中。核心数据模型具有称为"post_has_comments"的关系,这是级联的一对多关系。所以在对象帖子上我有"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对象上的属性注释是一个空的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
             };
}
有帮助吗?

解决方案

从地幔文档中:

Mantle可以轻松为可可或可可触摸应用程序写一个简单的模型层。

这只是一个未经证实的陈述。看着框架,我看不到证据的地方。您应该使用Apple的API获取您的对象,并将其插入核心数据。

Post *cdPost = [NSEntityDescription insertNewObjectForEntityForName:@"Post"
   inManagedObjectContext:self.managedObjectContext];
// configure the cdPost object with the data from the web service
for (id commentObject in commentArrayFromPostObject) {
   Comment *cdComment = 
       [NSEntityDescription insertNewObjectForEntityForName:@"Comment"
       inManagedObjectContext:self.managedObjectContext];
   // configure the cdComment object with the data from the web service
   cdComment.post = cdPost;
}
.

这就是它的全部。

其他提示

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

例如:

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

我自己做了很多次,它就像一个魅力!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top