【问题标题】:RestKit Relation Mapping Many to Many Core Data relationship fault errorRestKit Relation Mapping Many to Many Core Data 关系故障报错
【发布时间】:2013-07-28 17:20:12
【问题描述】:

我正在使用 RestKit 将以下 JSON 映射到核心数据。

我在核心数据中设置了多对多关系。

一个漏斗可以有很多用户,一个用户可以有很多漏斗。

我收到此错误消息:

(实体:料斗;id:0x767d240

hopperToUsers = <relationship fault: 0x8352960 'hopperToUsers'  ;

所以我的用户都没有更新。

json:

{
    "hoppers": [{
        "bearing": 0,
        "created_at": "2013-07-26T07:57:00Z",
        "distance": 0.0,
        "id": 4,
        "lat": "30.422032",
        "lng": "-86.617069",
        "name": "Fort Walton Beach",
        "updated_at": "2013-07-26T07:57:00Z",
        "users": [{
            "avatar_url": null,
            "created_at": "2013-07-26T21:37:21Z",
            "id": 1,
            "link": "http:/example.com/savetheday",
            "name": "Clark Kent",
            "post": " I once reported a heinous crime here.   Superman came to the rescue!",
            "thumbnail_url": null,
            "updated_at": "2013-07-26T21:37:21Z"
        }, {
            "avatar_url": null,
            "created_at": "2013-07-26T21:37:57Z",
            "id": 2,
            "link": "http:/example.com/villaincaught",
            "name": "Lex Luther",
            "post": " I got busted here. Almost took over the world!",
            "thumbnail_url": null,
            "updated_at": "2013-07-26T21:37:57Z"
        }]
    }]
}

我的代码遵循 RestKit README https://github.com/RestKit/RestKit 中的托管对象请求示例。

我意识到我的 NSURL 需要更改参数,但 The Hopper 似乎映射正常:

`[managedObjectStore createManagedObjectContexts];  
RKEntityMapping *userMapping = [RKEntityMapping mappingForEntityForName:@"User" inManagedObjectStore:managedObjectStore];
[userMapping addAttributeMappingsFromDictionary:@{  @"avatar_url":          @"avatarURL"          ,
                                                      @"created_at":               @"createdAt",
                                                    @"link":                @"jsonURL",
                                                    @"post":                @"post",
                                                    @"thumbnail_url":       @"thumbnailURL",
                                                    @"updated_at":          @"updatedAt",
                                                    @"id":                  @"userID"}];
RKEntityMapping *hopperMapping = [RKEntityMapping mappingForEntityForName:@"Hopper"  inManagedObjectStore:managedObjectStore];
[hopperMapping addAttributeMappingsFromDictionary:@{   @"id":             @"hopperID",
                                                        @"lat":            @"lat",
                                                        @"lng":            @"lng",
                                                        @"name":           @"name",
                                                        @"created_at":     @"createdAt",
                                                        @"distance":        @"distance"}];

[hopperMapping addPropertyMapping:[RKRelationshipMapping     relationshipMappingFromKeyPath:@"hopperToUsers" toKeyPath:@"hopperToUsers" withMapping:userMapping]];

NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:hopperMapping method:RKRequestMethodAny pathPattern:nil keyPath:@"hoppers" statusCodes:statusCodes];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:3000/hoppers.json?lat=30.422032&lng=-86.617069"]];
RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];
operation.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext;
operation.managedObjectCache = managedObjectStore.managedObjectCache;
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation,      RKMappingResult *result) {
    Hopper *hopper= [result firstObject];
    NSLog(@"Mapped the hopper: %@", hopper);
    NSLog(@"Mapped the user: %@", [hopper.hopperToUsers anyObject]);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"Failed with error: %@", [error localizedDescription]);
}];
NSOperationQueue *operationQueue = [NSOperationQueue new];
[operationQueue addOperation:operation];}`

【问题讨论】:

    标签: core-data many-to-many restkit


    【解决方案1】:

    当您调用addPropertyMapping 并创建关系映射时,...FromKeyPath 与 JSON 相关,因此应将其设置为 @"users"

    【讨论】:

    • 感谢您的快速回复。当我这样做时,它说......实体 Hopper 不符合键“用户”的键值编码。'
    • 那么keypaths应该是相反的,RestKit需要知道从哪里获取JSON中的数据以及将它放在对象中的哪里。
    • 哦。感谢您对 addProperty 映射的说明。我有 fromKetPath:@"users" 和 toKeyPath:hoppersToUsers (我在核心数据中的关系)..希望这是对的。现在我收到有关 URL 的响应错误。所以这个问题得到了解决,我会看看当我修复 NSURL 时会发生什么。我会放弃你,但这是我的第一篇文章!
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多