Core data Restkit在后续获取时获取空结果

Core data Restkit在后续获取时获取空结果,core-data,restkit-0.20,Core Data,Restkit 0.20,我正面临一个非常奇怪的问题,我希望有人能帮助我 我将Restkit(0.20)与CoreData设置一起使用,并且我为responseDescriptor设置了所有属性/关系映射。这是正确设置的,因为当我第一次调用getObjectsAtPath:parameters时,我得到了正确的结果,并且它能够映射到正确的对象 然而,在随后的getObjectsAtPath调用中,mappingResult出于某种原因会产生空结果,尽管我可以很好地看到来自服务器的请求,并且相同的结果JSON会被发送回客户

我正面临一个非常奇怪的问题,我希望有人能帮助我

我将Restkit(0.20)与CoreData设置一起使用,并且我为responseDescriptor设置了所有属性/关系映射。这是正确设置的,因为当我第一次调用getObjectsAtPath:parameters时,我得到了正确的结果,并且它能够映射到正确的对象

然而,在随后的getObjectsAtPath调用中,mappingResult出于某种原因会产生空结果,尽管我可以很好地看到来自服务器的请求,并且相同的结果JSON会被发送回客户端

有人见过这个问题吗

以下是映射代码:

 RKEntityMapping *userMapping = [User getEntityMapping:objectManager.managedObjectStore];
 RKEntityMapping *voteMapping = [Vote getEntityMapping:objectManager.managedObjectStore];
 RKEntityMapping *commentMapping = [Comment getEntityMapping:objectManager.managedObjectStore];
 RKEntityMapping *challengeActivityMapping = [ChallengeActivity getEntityMapping:objectManager.managedObjectStore];

// all relationship mapping
[challengeActivityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"user" toKeyPath:@"user" withMapping:userMapping]];
[challengeActivityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"votes" toKeyPath:@"votes" withMapping:voteMapping]];;
[challengeActivityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"comments" toKeyPath:@"comments" withMapping:commentMapping]];    

RKResponseDescriptor *challengeActivityResponse = [RKResponseDescriptor responseDescriptorWithMapping:challengeActivityMapping pathPattern:[ChallengeActivity restApiPathPattern] keyPath:@"challenge_activity" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptorsFromArray:[NSArray arrayWithObjects:challengeActivityResponse, userResponse, voteResponse, commentResponse, errorResponse, nil]];
以下是每个请求返回的JSON负载:

[{
  challenge_activity: {
    id: 1,
    comment: "completed this task on time!",
    image_url: null,
    created_at: "2013-05-15T00:12:21Z",
    user: {
      id: 1,
      name: "Kevin Liang",
      image_url: <some_image_url>
    },
    votes: [{
      id: 3,
      user: {
         id: 1,
         name: "Kevin Liang",
         image_url: <some_image_url>
      }
    }],
    comments: [{
      id: 1,
      text: "first comment!",
      user: {
         id: 1,
         name: "Kevin Liang",
         image_url: <some_image_url>
      }
    }]
  }
}]
下面是restkit调试输出,它显示了在第一次获取时缓存的对象(因为它返回了数据),而第二次获取没有产生任何结果,因此没有缓存(即使调用已触发到服务器):


正如我前面提到的,第一次调用fetchResultsFromServerAsync方法时,[mappingResult array]返回ChallengeActivity的NSManagedObject。但是,在随后的调用中,数组是空的

发布映射和请求的代码。这可能与缓存问题有关吗?为什么会这样?正确的解决方案是什么?如果发送回相同的负载,mappingResult将为空似乎很奇怪。所以我验证了这确实是缓存。如果服务器返回相同的JSON,则mappingResult为空。如果编辑返回的内容,mappingResult将返回新内容。这是故意的吗?如果是这样的话,应该在wiki或文档中详细说明这一点,因为这是非常违反直觉的。出于好奇,什么样的配置触发了这种行为?
- (void) fetchResultsFromServerAsync
{
    [[WellifyObjectManager manager] getObjectsAtPath:[[ChallengeActivity restApiPathPattern] stringByReplacingOccurrencesOfString:@":challenge_id" withString:[NSString stringWithFormat:@"%d", 1]] parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        self.challengeActivities = [mappingResult array];
        [self.tableView reloadData];
        NSLog(@"Loaded activities");
    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        NSLog(@"Hit error: %@", error);
    }];
}
2013-05-19 17:41:12.844 WellifyiPhone[16147:1d903] I restkit.network:RKHTTPRequestOperation.m:154 GET 'http://0.0.0.0:3000/challenges/1/challenge_activities'
2013-05-19 17:41:12.944 WellifyiPhone[16147:1d903] I restkit.network:RKHTTPRequestOperation.m:185 GET 'http://0.0.0.0:3000/challenges/1/challenge_activities' (200 OK) [0.0999 s]
2013-05-19 17:41:12.946 WellifyiPhone[16147:21503] I restkit.core_data:RKInMemoryManagedObjectCache.m:64 Caching instances of Entity 'ChallengeActivity' by attributes 'objectId'
2013-05-19 17:41:12.951 WellifyiPhone[16147:21503] I restkit.core_data:RKInMemoryManagedObjectCache.m:64 Caching instances of Entity 'User' by attributes 'objectId'
2013-05-19 17:41:12.953 WellifyiPhone[16147:21503] I restkit.core_data:RKInMemoryManagedObjectCache.m:64 Caching instances of Entity 'Vote' by attributes 'objectId'
2013-05-19 17:41:12.955 WellifyiPhone[16147:21503] I restkit.core_data:RKInMemoryManagedObjectCache.m:64 Caching instances of Entity 'Comment' by attributes 'objectId'
2013-05-19 17:41:12.961 WellifyiPhone[16147:1d903] Loaded activities
2013-05-19 17:41:14.717 WellifyiPhone[16147:1d903] I restkit.network:RKHTTPRequestOperation.m:154 GET 'http://0.0.0.0:3000/challenges/1/challenge_activities'
2013-05-19 17:41:14.819 WellifyiPhone[16147:1d903] I restkit.network:RKHTTPRequestOperation.m:185 GET 'http://0.0.0.0:3000/challenges/1/challenge_activities' (200 OK) [0.1021 s]
2013-05-19 17:41:14.820 WellifyiPhone[16147:1d903] Loaded activities