日志:
2014-04-09 15:03:10.196 App[49808:60b] request <NSMutableURLRequest: 0xd091170> { URL: http://www.domain.com/meetups?lastrequest=2014-04-09T15%3A03%3A10Z }
2014-04-09 15:03:10.214 App[49808:60b] I restkit.network:RKObjectRequestOperation.m:180 GET 'http://www.domain.com/meetups?lastrequest=2014-04-09T15%3A03%3A10Z'
2014-04-09 15:03:10.300 App[49808:632f] D restkit.object_mapping:RKMapperOperation.m:377 Executing mapping operation for representation: {
meetups = (
{
activities = (
{
activityId = 37;
activityType = "<null>";
customData = "<null>";
locationAddress = "k2-LocationAddress";
locationName = "k2-LocationName";
startTime = "0000-00-00 00:00:00";
},
{
activityId = 38;
activityType = "<null>";
customData = "<null>";
locationAddress = "k-LocationAddress";
locationName = "k-LocationName";
startTime = "0000-00-00 00:00:00";
}
);
comment = comment;
gettingBack = "gettingBack Test";
gettingThere = "gettingBack Test";
meetingType = 1;
meetupId = 65;
modified = "2014-04-09T20:59:29.000Z";
ownerId = Joe;
recipientId = "<null>";
}
);
}
and targetObject: (null)
2014-04-09 15:03:10.301 App[49808:632f] D restkit.object_mapping:RKMapperOperation.m:403 Finished performing object mapping. Results: (null)
2014-04-09 15:03:10.302 App[49808:21f] E restkit.network:RKObjectRequestOperation.m:243 GET 'http://www.domain.com/meetups?lastrequest=2014-04-09T15%3A03%3A10Z' (200 OK / 0 objects) [request=0.0849s mapping=0.0000s total=0.1043s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No response descriptors match the response loaded." UserInfo=0xd0b5a40 {NSErrorFailingURLStringKey=http://www.domain.com/meetups?lastrequest=2014-04-09T15%3A03%3A10Z, NSLocalizedFailureReason=A 200 response was loaded from the URL 'http://www.domain.com/meetups?lastrequest=2014-04-09T15%3A03%3A10Z', which failed to match all (0) response descriptors:, NSLocalizedDescription=No response descriptors match the response loaded., keyPath=null, NSErrorFailingURLKey=http://www.domain.com/meetups?lastrequest=2014-04-09T15%3A03%3A10Z, NSUnderlyingError=0xd08a190 "No mappable object representations were found at the key paths searched."}
代码:
@property (strong, nonatomic) RKObjectManager *objectManager;
....
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
self.objectManager = [self getObjectManager];
self.objectManager.managedObjectStore = [appDelegate setupCoreDataWithRESTKit];
[RKObjectManager sharedManager].requestSerializationMIMEType = RKMIMETypeJSON;
RKEntityMapping *invitationMapping = [RKEntityMapping mappingForEntityForName:@"Invite" inManagedObjectStore:self.objectManager.managedObjectStore];
[invitationMapping addAttributeMappingsFromDictionary:@{
@"recipientId" : @"recipientId",
@"meetingType" : @"meetingType",
@"startDate" : @"startDate",
@"gettingThere" : @"gettingThere",
@"gettingBack" : @"gettingBack",
@"comment" : @"comment"
}];
invitationMapping.identificationAttributes = @[@"meetupId"];
RKEntityMapping *activityMapping = [RKEntityMapping mappingForEntityForName:@"Activity" inManagedObjectStore:self.objectManager.managedObjectStore];
[activityMapping addAttributeMappingsFromDictionary:@{
@"locationName" : @"locationName",
@"locationAddress" : @"locationAddress",
@"startTime" : @"startTime",
@"customData" : @"customData"
}];
activityMapping.identificationAttributes = @[@"activityId"];
NSIndexSet *statusCodeSet = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
[invitationMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"activities" toKeyPath:@"activities" withMapping:activityMapping]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:invitationMapping
method:RKRequestMethodGET
pathPattern:@"/meetups"
keyPath:@"meetups" statusCodes:statusCodeSet];
NSMutableURLRequest *request = [self.objectManager.HTTPClient requestWithMethod:@"GET"
path:@"/meetups"
parameters:@{@"lastrequest": dateString
}];
[self.objectManager.HTTPClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc]initWithRequest:request responseDescriptors:@[responseDescriptor]];
operation = [self.objectManager managedObjectRequestOperationWithRequest:request managedObjectContext:self.objectManager.managedObjectStore.mainQueueManagedObjectContext success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSArray *array = mappingResult.array;
NSLog(@"array %@", array);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
}];
[operation start];
}
Invite
与 Activity
具有一对多关系,称为 activities
。
为什么我得到:“在搜索的关键路径中找不到可映射的对象表示。” ?
这是创建操作的正确方法:
RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc]initWithRequest:request responseDescriptors:@[responseDescriptor]];
但随后您将其替换为使用以下命令创建的另一个:
operation = [self.objectManager managedObjectRequestOperationWithRequest:request managedObjectContext:self.objectManager.managedObjectStore.mainQueueManagedObjectContext success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
它使用正确的对象管理器。这个问题是您没有将响应描述符提供给对象管理器,您只将其提供给刚刚被销毁的操作(因为您替换了它)。
因此,使用您创建的第一个操作,并通过调用
setCompletionBlockWithSuccess:failure:
设置成功和失败块。
对我来说,只需在 URL 末尾添加 / 即可解决问题。所以这两种情况都可以,如果 URL 末尾有 /,请尝试将其删除并查看是否有效。