如何从 CoreData 实体获取结果

Posted

技术标签:

【中文标题】如何从 CoreData 实体获取结果【英文标题】:How to fetch results from CoreData Entity 【发布时间】:2013-07-04 01:12:10 【问题描述】:

这似乎是一件很简单的事情,但我就是不能把它放在一起。我有一个 ios 应用程序使用 RestKit 0.20 来填充我的 CoreData 属性。我的主视图控制器是一个集合视图,它在启动时通过向服务器发出请求来填充。

当用户选择一个单元格时,我可以将该单元格中包含的数据传输到详细视图(图像和标题)。但我还需要向服务器发出另一个请求,以获取要在详细视图控制器中显示的所有信息。实体名称为Gist,属性为fullArticle

这是detailViewController的转场

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([[segue identifier] isEqualToString:@"newsDetail"]) 

        NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] lastObject];
        NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];

        [[segue destinationViewController] setmanagedObjectContext:managedObjectContext];
        [[segue destinationViewController] setDetailItem:object];       
    

这是我在-(void)viewDidLoad中使用的内容


    [super viewDidLoad];
    NSString *articleID =[self.detailItem valueForKey:@"articleId"];
    NSString *personID = [self.detailItem valueForKey:@"userID"];
    NSString *getArticle =[NSString stringWithFormat:@"/rest/article/getArticleForView?aid=%@&pid=%@&ip=255.255.255.0",articleID,personID];

    [[RKObjectManager sharedManager] getObjectsAtPath:getArticle parameters:nil success:nil failure:nil];
    NSURL *photoURL =[NSURL URLWithString:[self.detailItem valueForKey:@"imageUrl"]];
    NSData *photoData = [NSData dataWithContentsOfURL:photoURL];
    self.newsDetailImageView.image =[UIImage imageWithData:photoData];

//This is where I am stuck, How do you fetch the Attribute "fullArticle" from the request that I just made?
    self.newsDetailText.text = //valueForKey:"fullArticle" from article with ID `articleID`       


我尝试使用下面的代码,但 fetchedResultsController 设置为与 tableView 一起使用,所以我不知道没有 indexPath 就无法指定

NSManagedObject *detailText = [self.fetchedResultsController objectAtIndex:0];
self.newsDetailText.text = [[detailText valueForKey:@"fullArticle"] description];

当以这种方式尝试时,fullArticle 可能为 null,因为 objectAtIndex:0 不是指定我需要获取的对象的正确方法。

请为我阐明这一点!显然是一个菜鸟问题,所以代码 sn-ps 真的很有帮助!提前致谢!

在 Wain 的帮助下解决问题

Wain 指出请求不会立即发生。我需要在请求中使用回调来获取我想要的数据。 Restkit 以多种方式提供mappingResults。您可以在RKMappingResult 下阅读here。

这就是我的工作方式。

//I REPLACE MY SERVER REQUEST WITH THIS     
[[RKObjectManager sharedManager] getObjectsAtPath:getArticle parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

//HERE IS HOW I SET THE TEXT FIELD IN THE DETAIL VIEW CONTROLLER
    self.newsDetailText.text = [[mappingResult.firstObject valueForKey:@"fullArticle"]description];

// ERROR HANDLING
 failure:^(RKObjectRequestOperation *operation, NSError *error) 
        RKLogError(@"Operation failed with error: %@", error);
];

【问题讨论】:

【参考方案1】:

您发出的请求不会立即从服务器获得结果。您应该实现回调来处理成功和错误响应,并使用提供的映射结果来获取要显示的信息。

【讨论】:

Wain,你太好了,不能继续我的下一个问题。这将显示我实际上知道多少......回调是我提出的请求中的successerror 参数对吗?我也没有想到请求没有立即完成。我确实注意到,当我在日志中显示映射结果时,它们直到加载视图后才会显示。不知道为什么我没有注意到这一点。我将重温RKMappingResult 文档,尝试破译如何在回调中实现它。 映射结果基本上只是一个数组,由回调提供给您,包含下载中返回的对象。 哇!我不知道为什么我昨天不能把它放在一起,但你的回调评论是正确的。感谢您的耐心和一致性。勾选标记给你,我将编辑我的帖子以展示如何使用它们。再次感谢。

以上是关于如何从 CoreData 实体获取结果的主要内容,如果未能解决你的问题,请参考以下文章

CoreData(IOS)多列的唯一约束?

如何从coredata中的实体获取过滤数据

从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误

如何在 Swift 4 CoreData 中设置合并策略

ios coredata 会在新版本中更改实体属性导致崩溃

如何像实体框架一样在Core Data的一个类文件中对属于一个实体的方法进行分组?