【问题标题】:Core Data: NSPredicate for many-to-many relationship. ("to-many key not allowed here")核心数据:用于多对多关系的 NSPredicate。 (“此处不允许使用多对多键”)
【发布时间】:2011-05-12 04:43:58
【问题描述】:

我有两个名为“类别”和“文章”的实体,它们具有多对多关系。我想形成一个谓词来搜索 category.name 等于某个值的所有文章。我有以下内容:

 NSEntityDescription  *entityArticle   = [NSEntityDescription entityForName:@"Article" inManagedObjectContext:managedObjectContext]; 
 NSSortDescriptor  *sortDescriptor   = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
 NSArray     *sortDescriptors  = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
 NSPredicate    *predicate    = [NSPredicate predicateWithFormat:@"categories.name == [cd] %@", category.name]; 

 [request setSortDescriptors:sortDescriptors];
 [request setEntity:entityArticle];
 [request setPredicate:predicate];

 NSMutableArray *results = [[managedObjectContext executeFetchRequest:request error:nil] mutableCopy];

 if ([results count] > 0)
  NSLog(@"Results found."); 
 else 
  NSLog(@"NO results found."); 

 [request release];
 [sortDescriptor release];
 [sortDescriptors release];

我收到的错误是*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

有没有检索所需数据的选项?

【问题讨论】:

标签: core-data ios nspredicate


【解决方案1】:

对于那些面临同样问题的人。您可以使用 IN 运算符而不是 = / == 来查找任何集合中的特定对象。 查看here 以供参考。 Swift 和 Objective-C 没有区别

【讨论】:

    【解决方案2】:

    SWIFT 语法

    如果有人像我一样迅速写这篇文章......

    let predicate = NSPredicate(format: "ANY categories.name = %@", category.name!)
    fetchRequest.predicate = predicate
    

    为我工作。

    【讨论】:

      【解决方案3】:

      您正在尝试将集合 (categories.name) 与标量值 (category.name) 进行比较。您需要使用集合比较器 (CONTAINS),或使用谓词修饰符 (ANY/ALL/SOME 等)。

      尝试使用:

      [NSPredicate predicateWithFormat:@"ANY categories.name =[cd] %@", category.name];
      

      或者:

      [NSPredicate predicateWithFormat:@"categories.name CONTAINS[cd] %@", category.name];
      

      【讨论】:

      • 这对我有用,不管有没有'[cd]'。你能详细说明它的作用吗?
      • @DuncanBabbage [cd] 表示进行不区分大小写(c)和不区分变音符号(d)的搜索。
      • 如果category 与“文章”有相反的to one 关系,则它不起作用。知道如何断言吗?
      猜你喜欢
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2011-02-01
      • 2011-04-08
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多