development

핵심 데이터 : 다 대다 관계를위한 NSPredicate.

big-blog 2020. 11. 23. 19:35
반응형

핵심 데이터 : 다 대다 관계를위한 NSPredicate. ( "여기에서는 허용되지 않는 대다 키")


다 대다 관계를 가진 "Category"와 "Article"이라는 두 개의 엔티티가 있습니다. 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'

원하는 데이터를 검색 할 수있는 옵션이 있습니까?


컬렉션 ( categories.name)을 스칼라 값 ( category.name) 과 비교하려고합니다 . 컬렉션 비교기 ( CONTAINS)를 사용하거나 술어 수정 자 ( ANY/ ALL/ SOME등)를 사용해야합니다 .

다음을 사용해보십시오.

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

또는:

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

SWIFT 구문

이 글에서 내가 한 것처럼 신속하게 누군가가 일어난다면 ...

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

나를 위해 일했습니다.

참고 URL : https://stackoverflow.com/questions/4217849/core-data-nspredicate-for-many-to-many-relationship-to-many-key-not-allowed

반응형