코어 데이터 저장소의 데이터를 표시하는 NSOutlineView가 있습니다. 데이터는 managedObjectContext에 링크 된 NSarrayController를 사용하여 표시되며 NSTreeController를 사용하여 NSOutlineView에 표시됩니다 (많이 설명 된 내용은 here). NSPredicate (또는 다른 것)를 사용하여 표시되는 데이터를 필터링하고 싶습니다. 그러나이를 작동시키지 못합니다. 이것은 NSFetchedResultsController를 사용할 수 없기 때문에 iOS가 아닌 OSX입니다.arrayController 및 코어 데이터에 대한 술어 사용 방법
올바른 데이터를 검색하여 NSArray에 저장할 수 있습니다. 그러나 필터링 된 데이터 만 사용하여 내 outlineview에서 볼 수있는 내용을 자동으로 업데이트 할 수는 없습니다. 당신은 내 질문이 one 가까이에서 볼 수 있듯이
[arrayController setManagedObjectContext:_coreDataHelper.context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SDRDFileObject"
inManagedObjectContext:_coreDataHelper.context];
[request setEntity:entity];
NSNumber *directionLimit = @1;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"direction = %@", directionLimit];
[request setPredicate:predicate];
NSError *error;
[arrayController setContent:[_coreDataHelper.context executeFetchRequest:request error:&error]];
[_coreDataHelper.context reset];
[arrayController fetch:self];
[outlineView reloadData];
,하지만 난 여전히 고군분투하고있다 : 이것은 내가 현재 가지고있는 것입니다. arrayController에 대해 setContent를 사용하여이 작업을 수행하면 코어 데이터 컨텍스트와 arrayController의 내용이 일치하지 않는 문제가 발생한다고 가정합니다. 이 작업을 올바로 수행하는 방법에 대한 제안이나 예제는 크게 감사하겠습니다.
고마워요! 당신은 내가 'NSArrayController'를 필요로하지 않는다는 것을 절대적으로 옳았습니다. 이제는 잘 작동하는 treecontroller 만 사용하게되었습니다. 당신이 제안했듯이, 나는 그것을하기를 원하는 방식으로 'NSTtreeController'를 필터링하는 재귀 함수를 구현했다. 그러나 각 노드와 부모를 동시에 비 순차적으로 통과하기 때문에 매우 느립니다. filterContentUsingPredicate 구현 방법에 대한 예제 코드가 있으면 크게 감사하겠습니다. 나는 당신의 대답을 받아 들일 것입니다. –
제 필터링 절차가 당신 것보다 더 세련되지 않은 것처럼 들립니다. 나는 쓰레드를 사용하는 법을 배우는 것에 익숙하지 않았고, 광산 역시 트리의 모든 노드를 방문한다. 지금까지 나는 그것을 나의 목적을 위해 충분히 빨리 발견했다. 그래서 나는 더 정교한 해결책을 찾을 필요가 없다고 느꼈다. –