그림에 그림과 같이 두 개의 엔티티가 있습니다. 특정 약속 및 참석자가 삭제되지 않은 모든 관련 참석자를 가져와야합니다 (hasDeleted! = 1). 나는 다른 술어 형식으로 시도했다. 다음은 내가 시도한 두 가지 주요 술어이며이 술어를 사용할 수 없다. 이 문제를 극복하기 위해 나를 도울 수 있습니까?iOS 1 대 다수를위한 핵심 데이터 술어
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"objectName = %@ AND objectId = %i AND SUBQUERY(attendees, $x, $x.hasDeleted != 1)[email protected] != 0", [self.userDefaults stringForKey:OBJECT_NAME], [[self.userDefaults objectForKey:OBJECT_ID] intValue]];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"objectName = %@ AND objectId = %i AND (ANY attendees.hasDeleted != 1)", [self.userDefaults stringForKey:OBJECT_NAME], [[self.userDefaults objectForKey:OBJECT_ID] intValue]];
약속 목록의 tableview 참석자 세부 사항을 볼 수 있습니다
상세 약속보기.
는 결과 컨트롤러 코드를 가져 오기 :
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Attendee" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"uuid" ascending:NO];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"appointment.objectName = %@ AND appointment.objectId = %i AND hasDeleted != 1", [self.userDefaults stringForKey:OBJECT_NAME], [[self.userDefaults objectForKey:OBJECT_ID] intValue]];
[fetchRequest setPredicate:predicate];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _fetchedResultsController;
}
당신이 오류는 콘솔에 로그인 한 마을 추가하려면? "objectId = % i"를 "objectId = % @"로 변경하고 거기에 NSNumber 객체를 전달할 수 있습니다 (그러면 int로 변환 할 필요가 없습니다). 하위 쿼리가 필요하지 않습니다. 두 번째 쿼리가 작동해야합니다. –
술어를 "하나씩"사용해 보았습니까? 내 말은, 모든 and/or/subquery를 나누고, 하나씩 그것이 원하는 것을 얻는지를 보아라. 그런 다음 조금씩 조합하십시오. – Larme
@thom_ek 오류가 없습니다. 두 번째 이벤트를 필터링하지 않고 모든 참석자를 반환합니다. – Chinthaka