0

我有一个使用 CoreData 和 Restkit 0.20 的 iOS 应用程序。主视图控制器是一个集合视图,由使用 Restkit 对我的服务器的请求填充。对服务器的请求返回要放置在每个单元格中的图像和标题。如果用户选择了一个单元格,我需要向服务器发出第二个请求,以获取有关所选单元格的详细信息。

我花了一个晚上试图在prepareForSegue方法中实现这一点。问题是我似乎无法弄清楚如何从prepareForSegue.

这是prepareForSegue方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"newsDetail"]) {

// I USE THIS PORTION TO GET DATA THAT IS NEEDED FOR THE GET REQUEST TO THE SERVER AND TO PASS SOME ADDITIONAL ITEMS FROM THE FIRST REQUEST TO THE DETAIL VIEW CONTROLLER
        NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] lastObject];
        NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
        NSString *articleID =[object valueForKey:@"gistID"];
        NSString *personID = [object valueForKey:@"userID"];

// I USE THIS LINE TO ASSEMBLE THE STRING FOR getObjectsAtPath BELOW
        NSString *getArticle =[NSString stringWithFormat:@"/rest/article/getArticleForView?aid=%@&pid=%@&ip=255.255.255.0",articleID,personID];

//HERE I MAKE THE CALL TO THE SERVER USING RESTKIT METHODS        
        [[RKObjectManager sharedManager] getObjectsAtPath:getArticle parameters:nil success:nil failure:nil];    

        [[segue destinationViewController] setDetailItem:object];
    }
}

这是我在详细视图控制器中加载它的方式。

- (void)configureView
{
    if (self.detailItem) {
        self.newsDetailText.text = [[self.detailItem valueForKey:@"fullArticle"]description];
        NSURL *photoURL =[NSURL URLWithString:[self.detailItem valueForKey:@"imageUrl"]];
        NSData *photoData = [NSData dataWithContentsOfURL:photoURL];
        self.newsDetailImageView.image =[UIImage imageWithData:photoData];
    }
}

它将正确地继续,并且图像(已经从第一个请求中持久保存)将被加载,但文本(从 segue 的请求中检索)不会。实际上valueForKey fullArticle是空的。

基于这个问题,我可能很明显我是一个菜鸟。考虑到这一点,代码片段非常有用。谢谢!

4

1 回答 1

0

由于您正在执行异步请求,因此您要显示的数据是在destinationViewController实际出现之后到达的。因此,您应该将一个success块传递给您的请求并在其中更新您的视图。像这样的东西:

UIViewController *viewController = [segue destinationViewController];
[[RKObjectManager sharedManager] getObjectsAtPath:getArticle parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    if (!operation.error) {
        viewController.newsDetailText.text = mappingResult.firstObject[@"fullArticle"];
    }
} failure:nil];
于 2013-07-03T05:00:04.427 回答