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];