与sectionNameKeyPath有关的多对多关系

时间:2014-12-11 07:23:53

标签: ios objective-c iphone core-data one-to-many

我想显示Project,以便在sharedToUsers的基础上显示所有项目。表示具有User.user_id的部分名称,它应显示该用户的所有共享项目。但我无法正确设置NSFetchedResultsController的节值,因为它是一个太多的关系,它在 sectionNameKeyPath 上崩溃。 任何帮助

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *theParent = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:_managedObjectContext];
//the name key exsit in parent entity of project.
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:10];
[fetchRequest setEntity:theParent];

[fetchRequest setPredicate:_predicate];

  NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:_managedObjectContext sectionNameKeyPath:@"ANY sharedToUsers.user_id"
                                               cacheName:[self getCacheNameForNSFetchedResultsController]];

to-many relation in coredata

2 个答案:

答案 0 :(得分:0)

如果您有像我一样的Senario,那么当您更改核心数据中的数据时,请尝试不使用使用父对象或类别对象添加或更新关系出货项目。如果你必须将某些东西与类别链接,那么尝试从子对象链接。

不要使用此

[category addRelationShipItem:child];

使用此

`[child addToCategory:category];`

当你使用它时,它不会在NSFetchResultController调用中触发更新调用。

快乐的编码。

答案 1 :(得分:-1)

嗨如果你想要获取用户共享的项目,你需要这个谓词:

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *theParent = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:_managedObjectContext];

   NSString *userId; // If you user_id is a NSNumber change you to it.
   NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY sharedToUsers.user_id = %@",userId];
   [fetchRequest setPredicate:predicate];

您使用NSSort:姓名的最后一件事,但命名它不是Project属性。