繁体   English   中英

如何在Segue中从CoreData获取结果

[英]How to fetch results from CoreData in a segue

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

我花了一prepareForSegue时间在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];
    }
}

它将正确地进行搜索,并且将加载图像(该图像在第一个请求中已经保留),但是不会加载文本(在请求时从请求中检索到的文本)。 实际上, valueForKey fullArticle为null。

很明显,我是这个问题上的新秀。 考虑到这一点,代码片段非常有帮助。 谢谢!

由于您正在执行异步请求,因此您想要显示的数据将在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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM