Iphone 使用NSFetchedResultController显示详细信息ViewController

Iphone 使用NSFetchedResultController显示详细信息ViewController,iphone,core-data,detailsview,nsfetchedresultscontroller,Iphone,Core Data,Detailsview,Nsfetchedresultscontroller,在我的iphone应用程序中,我有许多关系主题-->>问题的核心数据,因此每个主题都包含一些问题,我知道如何使用NSFetchedResultController在UItableView中显示主题列表,但我不知道如何构造FetchedResultController以显示所选主题中的问题 我试图在互联网上找到类似的教程或例子,但找不到任何东西 我怎么做 非常感谢您不会使用NSFetchedResultsController。相反,您将在详图视图控制器中定义一个属性 @property (nona

在我的iphone应用程序中,我有许多关系主题-->>问题的核心数据,因此每个主题都包含一些问题,我知道如何使用NSFetchedResultController在UItableView中显示主题列表,但我不知道如何构造FetchedResultController以显示所选主题中的问题

我试图在互联网上找到类似的教程或例子,但找不到任何东西

我怎么做


非常感谢

您不会使用NSFetchedResultsController。相反,您将在详图视图控制器中定义一个属性

@property (nonatomic, retain) Topic *topic;
然后,在创建详细视图控制器时,将根据在didSelectRowForIndexPath中选择的主题设置属性


然后在详细视图中,只需使用核心数据关系(Topic.questions)从主题对象中获取问题即可。

您不会使用NSFetchedResultsController。相反,您将在详图视图控制器中定义一个属性

@property (nonatomic, retain) Topic *topic;
然后,在创建详细视图控制器时,将根据在didSelectRowForIndexPath中选择的主题设置属性


然后在您的详细视图中,只需使用核心数据关系(Topic.questions)从主题对象中获取问题即可。

好的,我发现我需要使用
NSPredicate
。现在,我尝试将其添加到我的fetchedResultController中,如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"topic == %@", self.topic];
[fetchRequest setPredicate:predicate];
但是得到一个错误:

'keypath topic not found in entity <NSSQLEntity QuestionItem id=2>'
“在实体中找不到密钥路径主题”
我怎么做

谢谢

编辑

明白了

需要在数据模型中设置双方关系,并设置如下谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"topic == %@", self.topic];
[fetchRequest setPredicate:predicate];

[NSPredicate predicateWithFormat:@“topic.topicName==%@”,self.topic]
好的,我发现我需要使用
NSPredicate
。现在,我尝试将其添加到我的fetchedResultController中,如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"topic == %@", self.topic];
[fetchRequest setPredicate:predicate];
但是得到一个错误:

'keypath topic not found in entity <NSSQLEntity QuestionItem id=2>'
“在实体中找不到密钥路径主题”
我怎么做

谢谢

编辑

明白了

需要在数据模型中设置双方关系,并设置如下谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"topic == %@", self.topic];
[fetchRequest setPredicate:predicate];

[NSPredicate predicateWithFormat:@“topic.topicName==%@”,self.topic]
您不需要返回到
NSFetchRequest
以获取关系另一端的对象。只要问一下你的
主题
。这将为您提供故障实体的
NSSet
。出现故障的实体占用的内存非常少,您可以轻松地提取1000个


如果需要过滤这些对象,则可以对返回的
NSSet
执行
-filteredSetWithPredicate:
,但转到磁盘是浪费和缓慢的。

您不需要需要返回到
NSFetchRequest
以获取关系另一端的对象。只要问一下你的
主题
。这将为您提供故障实体的
NSSet
。出现故障的实体占用的内存非常少,您可以轻松地提取1000个


如果您需要过滤这些问题,那么您可以在返回的
NSSet
上执行
-filteredSetWithPredicate:
,但转到磁盘是浪费和缓慢的。

谢谢您的回答,我想了一下,但如果我的主题包含1000个问题,应用程序将在内存中保存所有问题,不是吗?使用NSFetchedResultsController到底有什么意义?我认为使用它可以减少内存使用。或者我有什么问题吗?此外,在这里的许多问题中,我看到了关于使用NSFetchedResultsController的详细讨论视图,例如,这里:或者这里:唯一的问题是没有解释如何操作((不需要属性,您可以使用KVC访问关系,而无需子类化。感谢您的回答,我考虑了一下,但如果我的主题包含1000个问题,应用程序将在内存中保存所有问题,不是吗?使用NSFetchedResultsController有什么意义?我认为使用它可以减少内存y用法。或者我有什么问题吗?此外,在这里的许多问题中,我看到了关于使用NSFetchedResultsController的详细讨论视图,例如:这里:或者这里:唯一的问题是没有解释如何操作((不需要属性,您可以使用KVC访问关系,而无需子类化。好的,谢谢Marcus,在我的rootViewcontroller中,我还需要添加一些类似于“所有主题”的单元格,并相应地在detailsView中显示所有问题的列表。是否有任何简单且低内存的方法可以使用这种方法?内存将与l一样只要你把所有的问题都放在一个
NSFetchedResultsController
中,核心数据就应该保持低内存。不过,我的建议是试试看会发生什么。预先猜测内存问题类似于预先优化;肯定是在浪费时间。对不起,如果你建议首先,我不应该使用另一个
NSFetchedResultController
而应该使用NSSet,我如何才能获得一组所有问题?感谢您的对象有一个关系。当用户点击一行时,您将获得与该行相关联的主题。您将该主题交给下一个
UIViewController
并将其推到导航stac上k、 然后,您可以通过[topic valueForKey:@“问题”提问该主题对于要在相应视图中显示的问题的
NSSet
。对于该问题,您希望使用
NSFetchedResultsController
,并将其与选择了
主题的行分开/区别对待。我的回答针对的是您的原始问题,其中选择了
主题
实体。I如果您有不同的问题,建议您创建新的SO问题。有助于澄清。好的,谢谢Marcus,在我的rootViewcontroller I al中