代码之家  ›  专栏  ›  技术社区  ›  Oh Danny Boy

核心数据:多对多关系的预测。(此处不允许使用多个键)

  •  62
  • Oh Danny Boy  · 技术社区  · 14 年前

    我有两个名为“类别”和“文章”的实体,它们之间有多对多的关系。我想形成一个谓词来搜索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'

    是否有检索所需数据的选项?

    2 回复  |  直到 7 年前
        1
  •  145
  •   Dave DeLong    14 年前

    categories.name category.name CONTAINS ANY ALL SOME

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

    [NSPredicate predicateWithFormat:@"categories.name CONTAINS[cd] %@", category.name];
    
        2
  •  1
  •   caleb81389    7 年前

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