【发布时间】: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
关系:
meeting 与 activity 有 to-many 关系,称为 activities
activity 与 customData 有 to-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) {
}];
}
}
}
});
问题:
出于某种原因,我失去了activity 和customData 对象之间的关系。如您所见,CoreData 的内部 ID (ZACTIVITY) 并不总是分配 Id,因此,我丢失了对象,因为关系不再存在。我认为它在 PUT 调用期间没有为对象分配 ID。
我在 RESKit 论坛上阅读了有关使用 @parent 和 @metadata 的信息,但我不确定如何使用它,或者这是否是正确的方法。请指教。
【问题讨论】:
标签: ios core-data restkit entity-relationship restkit-0.20