RestKit – 无法显示JSON数据到我的tableView

我正在使用Rest Kit 0.20.3和带有核心数据的Xcode 5。 我从我的服务器收到JSON数据,但我无法在tableView控制器上显示它。

这里是AppDelegate.m中的映射和响应描述符代码

RKEntityMapping *playerMapping = [RKEntityMapping mappingForEntityForName:@"Player" inManagedObjectStore:managedObjectStore]; [playerMapping addAttributeMappingsFromDictionary:@{@"id": @"playerID", @"name": @"playerName", @"age": @"playerAge", @"created_at": @"createdAt", @"updated_at": @"updatedAt"}]; RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:playerMapping method:RKRequestMethodGET pathPattern:@"/players.json" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; [objectManager addResponseDescriptor:responseDescriptor]; 

和我的代码为我的tableViewController.m GET方法

 -(void)loadPlayers{ [[RKObjectManager sharedManager] getObjectsAtPath:@"/players.json" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){ [self.refreshControl endRefreshing]; NSLog(@"IT WORKED!"); self.fetchedResultsController = [mappingResult firstObject]; }failure:^(RKObjectRequestOperation *operation, NSError *error){ NSLog(@"FAILED TO PERFORM GET"); }]; } 

和cellForRowAtIndexPath的代码:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; Player *player = [self.fetchedResultsController objectAtIndexPath:indexPath]; cell.textLabel.text = player.playerName; return cell; } 

我是新的核心数据,所以我没有关于如何分配get方法的Success Block中接收到的数据的想法。

代码为FRC:

 - (NSFetchedResultsController *)fetchedResultsController { if (_fetchedResultsController != nil) { return _fetchedResultsController; } NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; // Edit the entity name as appropriate. NSEntityDescription *entity = [NSEntityDescription entityForName:@"Player" inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:entity]; // Set the batch size to a suitable number. [fetchRequest setFetchBatchSize:20]; // Edit the sort key as appropriate. NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"playerName" ascending:NO]; NSArray *sortDescriptors = @[sortDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; // Edit the section name key path and cache name if appropriate. // nil for section name key path means "no sections". NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"]; aFetchedResultsController.delegate = self; self.fetchedResultsController = aFetchedResultsController; NSError *error = nil; if (![self.fetchedResultsController performFetch:&error]) { // Replace this implementation with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return _fetchedResultsController; } 

使用这行代码

 controller.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext; 

代替

 controller.managedObjectContext = self.managedObjectContext; 

它将使您的上下文成为主要的队列上下文。 尝试一下!

看看这个链接https://github.com/RestKit/RestKit/blob/master/Docs/Object%20Mapping.md

在这里,你将得到如何与rest工具包的核心数据..希望它有助于,因为它为我工作…

您不需要将映射结果分配给任何东西。 在使用核心数据和实体映射时,核心数据模型将在映射过程中由RestKit为您更新和保存。

这一行:

 self.fetchedResultsController = [mappingResult firstObject]; 

没有意义,因为映射结果包含Player类的实例。 它也不是直接的数组。

您提取的结果控制器应该是标准configuration(就像创build新项目时由Apple模板创build的那样)。 这将自动观察模型并刷新表视图(由于模型更改时的委托方法callback)。


获得MOC:

 NSManagedObjectContext *moc = [[RKManagedObjectStore defaultStore] mainQueueManagedObjectContext];