【问题标题】:RESTKit: Objects are losing relationshipsRESTKit:对象正在失去关系
【发布时间】:2014-09-30 09:17:23
【问题描述】:

收到的 JSON 数据:

{
    "meeting": [{
        "meetingId": 506,
        "ownerId": "John.Doe",
        "startDate": "2014-07-27T13:15:07.000Z",
        "activities": [{
            "activityType": "Active Activity",
            "activityId": 729,
            "locationAddress": "1188 El Camino Real, San Bruno, CA, United States",
            "startTime": "2014-07-28T04:45:00.000Z",
            "customData": {
                "title": "Active Activity"
            },
            "modified": "2014-07-23T13:26:41.000Z"
        }],
        "senderId": "Johnny.Appleseed",
        "status": 8
}

SQLite 文件:

我有以下实体:

meeting
activity
customData

关系:

meetingactivityto-many 关系,称为 activities

activitycustomDatato-many 关系

当然,每个关系都有一个反向关系。

customData entity 只有一个属性叫title

这是我的 customData.h

@class Activity;

@interface customData : NSManagedObject

@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) Activity *activity;

@end

RESKit 映射:

+(RKEntityMapping *)customDataMapping:(RKEntityMapping *)customDataMapping;
{
    [customDataMapping addAttributeMappingsFromDictionary:@{@"title":@"title"}];
    customDataMapping.identificationAttributes = @[@"title"];
    return customDataMapping;
}

对象管理器:

                meetingMapping = [RESTMappingProvider meetingPutMapping:meetingMapping];
                activityMapping = [RESTMappingProvider activityPutMapping:activityMapping];
                customDataMapping = [RESTMappingProvider customDataMapping:customDataMapping];

                [activityMapping  addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:kCustomDataRelationship
                                                                                                 toKeyPath:kCustomDataRelationship
                                                                                               withMapping:customDataMapping]];

                [meetingMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:kActivitiesRelationship
                                                                                                  toKeyPath:kActivitiesRelationship
                                                                                                withMapping:activityMapping]];

                RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[meetingMapping inverseMapping] objectClass:[Meeting class] rootKeyPath:nil method:RKRequestMethodAny];

                NSIndexSet *statusCodeSet = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);

                RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:meetingMapping
                                                                                                        method:RKRequestMethodAny
                                                                                                   pathPattern:kMeetupKeyPath
                                                                                                       keyPath:nil
                                                                                                   statusCodes:statusCodeSet];

                objectManager.requestSerializationMIMEType = RKMIMETypeJSON;
                [objectManager addRequestDescriptor:requestDescriptor];
                [objectManager addResponseDescriptor:responseDescriptor];
                [objectManager.HTTPClient  registerHTTPOperationClass:[AFHTTPRequestOperation class]];

                [objectManager putObject:anInvite path:kMeetupKeyPath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                    NSLog (@"******* OUTBOX OBJECT PUT **********");

                } failure:^(RKObjectRequestOperation *operation, NSError *error) {


                }];
            }
        }
    }
});

问题: 出于某种原因,我失去了activitycustomData 对象之间的关系。如您所见,CoreData 的内部 ID (ZACTIVITY) 并不总是分配 Id,因此,我丢失了对象,因为关系不再存在。我认为它在 PUT 调用期间没有为对象分配 ID。

我在 RESKit 论坛上阅读了有关使用 @parent@metadata 的信息,但我不确定如何使用它,或者这是否是正确的方法。请指教。

【问题讨论】:

    标签: ios core-data restkit entity-relationship restkit-0.20


    【解决方案1】:

    我猜您的自定义数据的 titles 并不总是唯一的,因此,因为您使用 customDataMapping.identificationAttributes = @[@"title"]; 和 1:many 关系,一些自定义数据实例将与其旧关系断开连接并连接换一个新的。

    您可能应该删除identificationAttributes 并添加一个获取请求块,该块在收集数据后清除任何孤立的自定义数据对象(关系为零的对象)。

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多