Iphone 目标C:NavigationController中CoreData的分层传递
我需要一些关于这个问题的指导。我有一个导航控制器,根控制器使用CoreData和NSFetchController。现在,根控制器工作正常。当我单击一个项目时,它应该分层显示下一个UITable,该UITable关联上一个根控制器中的行的值 现在,我不确定应该将什么作为属性传递给下一个UITableViewController。它应该是一个数组,还是应该传递NSFetchedResultsController?值得注意的是,在第二层之后,层次结构中将有另一层 谢谢Iphone 目标C:NavigationController中CoreData的分层传递,iphone,objective-c,iphone-sdk-3.0,iphonecoredatarecipes,Iphone,Objective C,Iphone Sdk 3.0,Iphonecoredatarecipes,我需要一些关于这个问题的指导。我有一个导航控制器,根控制器使用CoreData和NSFetchController。现在,根控制器工作正常。当我单击一个项目时,它应该分层显示下一个UITable,该UITable关联上一个根控制器中的行的值 现在,我不确定应该将什么作为属性传递给下一个UITableViewController。它应该是一个数组,还是应该传递NSFetchedResultsController?值得注意的是,在第二层之后,层次结构中将有另一层 谢谢 多伦你至少有两个选择: 将对托
多伦你至少有两个选择:
站点
和帖子
之间有一对多的关系(即一个站点实体有多个帖子实体)
“Posts”列表视图控制器可以包括site
托管对象、siteID
托管对象ID或siteName
字符串属性
当您按下“Posts”列表VC时,设置其site
或siteName
属性,并相应地配置请求谓词
例如,fetch请求的谓词应包含类似“%@”的site.name,例如:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site.name like '%@')", self.site.name]];
[fetchRequest setPredicate:requestPredicate];
// ...
或者您可以在上进行比较,这通常更适合于唯一比较:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site = %@)", self.siteID]];
[fetchRequest setPredicate:requestPredicate];
// ...
在这两种情况下,您都筛选了核心数据存储,以匹配所有Post
实体,这些实体的站点
名称或站点
托管对象ID与您的条件相同
执行提取后,这些实体通常位于
NSSet*
或NSArray*
中,可以轻松用作UITableView
数据存储,尤其是在使用提取结果控制器的情况下。您有两个选项,至少:
站点
和帖子
之间有一对多的关系(即一个站点实体有多个帖子实体)
“Posts”列表视图控制器可以包括site
托管对象、siteID
托管对象ID或siteName
字符串属性
当您按下“Posts”列表VC时,设置其site
或siteName
属性,并相应地配置请求谓词
例如,fetch请求的谓词应包含类似“%@”的site.name,例如:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site.name like '%@')", self.site.name]];
[fetchRequest setPredicate:requestPredicate];
// ...
或者您可以在上进行比较,这通常更适合于唯一比较:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site = %@)", self.siteID]];
[fetchRequest setPredicate:requestPredicate];
// ...
在这两种情况下,您都筛选了核心数据存储,以匹配所有Post
实体,这些实体的站点
名称或站点
托管对象ID与您的条件相同
执行提取后,这些实体通常位于
NSSet*
或NSArray*
中,您可以轻松地将其用作UITableView
数据存储,尤其是在使用提取结果控制器的情况下。谢谢Alex,我尝试过这样做,当我使用AppController时,我在控制器之间传递MOC和其他东西。通过这种方法(创建一个新的fetchrequest),我不确定如何根据以前的结果链接实体(即从Site->Posts,如何做谓词以关联特定的选定站点)。这就是我的意思。谢谢mate还有一件事,mate,请注意,我的模型有一个站点属性,它有一个包含许多帖子的NSSET(这就是为什么我有通过NSArray的想法),但是是的,我不确定我应该实际地走哪条路。您建议使用MOC,但如果我能得到一些关于如何使用它的说明,请根据所选站点进行映射。我目前正在使用MOC,使用NSPredicate*pred=[NSPredicate PREDITEWITHFORMAT:@“(站点=%d)”,i];其中,i是要与之进行比较的站点实体对象。显然%d不是正确的语法,所以如果我使用MOC,我该如何解决这个问题?嗨,伙计,谢谢你的详细回复。现在我实现了你所说的,减去谓词,然后返回行。现在使用您推荐的谓词Site.name它不起作用,因此我使用Post.h中的属性Site sitePosts并使用(PostSite.name,如“%@”),[self.Site.name],但不返回任何行。我认为我的谓词是错的,但不是sur