【问题标题】:Nested to-many relationships with RestKit与 RestKit 的嵌套对多关系
【发布时间】:2011-10-21 17:30:27
【问题描述】:

我正在尝试将以下 JSON 的关系映射到支持 CoreData 的模型。

这是 JSON:

{
    "photos": [
        {
            "id": 1,
            "thumb": "http://localhost/test_1_thumb.png",
            "image": "http://localhost/test_1.png",
            "date": "2011-07-02T06:06:16Z",
            "likes": 0,
            "user": {
                "id": 1,
                "username": "User1",
                "avatar": "http://cdn.domain.com/avatar.jpg"
            },
            "comments": [
                {
                    "date": "2011-07-02T06:06:16Z",
                    "text": "This is the only comment",
                    "id": 1,
                    "author": {
                        "username": "User1",
                        "id": 1,
                        "avatar": "http://cdn.domain.com/avatar.jpg"
                    }
                }
            ]
        }
    ]
}

我使用 RestKit 的 OM2 类映射的 CoreData 模型。

照片类。

@interface Photo : NSManagedObject

@property (nonatomic, retain) NSString * thumbnailUrl;
@property (nonatomic, retain) NSString * imageUrl;
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSNumber * likes;
@property (nonatomic, retain) NSNumber * photoID;
@property (nonatomic, retain) User *owner;
@property (nonatomic, retain) NSSet *comments;

@end

@interface Photo (CoreDataGeneratedAccessors)

- (void)addCommentsObject:(Comment *)value;
- (void)removeCommentsObject:(Comment *)value;
- (void)addComments:(NSSet *)values;
- (void)removeComments:(NSSet *)values;

@end

@implementation Photo

@dynamic thumbnailUrl;
@dynamic imageUrl;
@dynamic date;
@dynamic likes;
@dynamic photoID;
@dynamic owner;
@dynamic comments;

@end

现在我不完全确定的部分是关系:

// Map relationships between entities.
[commentMapping mapKeyPath:@"author" toRelationship:@"author" withMapping:userMapping];
[photoMapping mapKeyPath:@"user" toRelationship:@"owner" withMapping:userMapping];
[photoMapping mapKeyPath:@"comments" toRelationship:@"comments" withMapping:commentMapping];

有了这个,我可以访问除了照片的comments 属性之外的所有属性,但出现以下错误:Comments = Relationship 'comments' fault on managed object。我感觉这与将 comments 定义为 NSSet 的 Photo 模型有关,或者我在关系映射上做错了,但我不确定。

【问题讨论】:

    标签: ios core-data restkit


    【解决方案1】:

    事实证明,问题与 RestKit 或映射无关,而是我对 CoreData 功能的理解。

    我正在访问我的委托中的映射 JSON 对象,如下所示:

    - (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
        NSLog(@"Loaded photos: %@", objects);
    
        for (id object in objects) {
            Photo *photo = object;
            // Print other photo attributes...
    
            NSLog(@"Comments = %@", photo.comments );
        }
    }
    

    问题在于尝试直接打印集合对象。 CoreData 不会在数据存储上引发故障。只需按如下方式替换为快速迭代并访问属性即可访问 cmets 对象。

    for (Photo *photo in objects) {
        for (Comment *comment in photo.comments) NSLog(@"Comment = %@", comment.text);
    }
    

    【讨论】:

      【解决方案2】:

      你需要这样的东西:

      [objectManager.mappingProvider setMapping:commentMapping forKeyPath:@"cmets"];

      也结帐 https://github.com/RestKit/RestKit/wiki/Object-mapping

      【讨论】:

      • 我认为这不会正确建立关系吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      相关资源
      最近更新 更多