저는 iOS 프로그래밍의 새로운 버전입니다. NSFetchedResultsController를 사용하여 CoreData로 채워진 UITableView를 구현했습니다. 이 부분은 잘 작동합니다. 그런 다음 테이블을 검색 할 수 있도록 UISearchDisplayController를 추가했습니다. 검색 자체가 잘 작동하지만보기를 다시로드 할 때 내 CoreData 개체가 새고있는 것 같습니다. 검색을 수행하거나 SearchView를 닫을 때마다 앱이 충돌하지만 Instrument Report 객체가 CoreData 프레임 워크에서 누출됩니다.UISearchDisplayController, UITableView 및 코어 데이터
는이 같은 검색 기능을 구현 한 :
- (void)filterContentForSearchText:(NSString*)searchText
scope:(NSString*)scope
{
if (searchText && searchText.length) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains %@", searchText];
[self.fetchedResultsController.fetchRequest setPredicate:predicate];
}
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
// Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
}
나는 내가 검색 창을 닫을 때 :
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
NSLog(@"searchBarTextDidEndEditing: Reset fetchedResultsController predicate");
self.fetchedResultsController.fetchRequest.predicate = nil;
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@",error,[error userInfo]);
abort();
}
}
사람이 내가 뭘 잘못 볼 수 있을까요?
감사 캠
업데이트 :이 게시물 How to filter NSFetchedResultsController (CoreData) with UISearchDisplayController/UISearchBar을 다음과 같은 방법으로 게터를 구현하지만 검색 창에 I "형"일부 문자가 문제를 보인다 있도록 할 때 나는 아직도 핵심 데이터 오브젝트를 유출하고 나는 새로운 데이터를 가져 와서 뷰를 닫지 않을 때입니다. 내가 검색 창에 입력 할 때 나는 게터가 나는 등의 새로운 FRC를 할당 다시 호출 전무 self.searchBarFetchedResultsController
(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
self.searchBarFetchedResultsController.delegate = nil;
self.searchBarFetchedResultsController = nil;
}
2)로 설정
1) : 같은
코드가 보인다 예제에 따라.
- (NSFetchedResultsController *)searchBarFetchedResultsController
{
if (_searchBarFetchedResultsController != nil)
{
return _searchBarFetchedResultsController;
}
_searchBarFetchedResultsController = [self newFetchedResultsControllerWithSearch:self.searchDisplayController.searchBar.text];
return _searchBarFetchedResultsController;
}
- (NSFetchedResultsController *)newFetchedResultsControllerWithSearch:(NSString *)searchString
{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Beers"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains %@", searchString];
if(searchString.length)
{
[request setPredicate:predicate];
}
[request setFetchBatchSize:20];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.beerDB2.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
aFetchedResultsController.delegate = self;
NSError *error = nil;
if (![aFetchedResultsController performFetch:&error])
}
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return aFetchedResultsController;
}
그런 다음 대리인 메서드에서 FRC에 액세스 할 때이 메서드를 사용하여 올바른 값을 얻습니다.
- (NSFetchedResultsController *)fetchedResultsControllerForTableView:(UITableView *)tableView
{
return tableView == self.favTab ? self.fetchedResultsController : self.searchBarFetchedResultsController;
}
모든 검사기 내가 핵심 데이터 객체의 수백을 누출하고 나에게 말한다 것을 제외하고 완벽하게 작동 :(그리고 무엇 나를 미치게 만드는 것은 약간의 검색을 위해 다음 그것을 잘 작동합니다 내가 그들을 누출하고 모든 시간.입니다 누출을 시작한다.이 시점에서 후속의 검색이 누출을 유발한다. '의 viewDidLoad'On
를 사용하여 어레이를 필터링 fetchedResultsController에 대한 맞춤 getter가 있습니까? 그럴 경우 해당 코드의 모양은 무엇입니까? – Hunter
안녕하세요. 헌터 님, 저는 처음 아이디어가 있다고 생각합니다. 문제. 두 TableViews에 대해 하나의 FRC를 사용하고 있습니다. 처음에는 분리 된 것으로 이해하지 못했습니다 (처음에는 searchBar). 오늘 밤 나는 2 개의 FRC로 구현하려고하고 그것이 작동하는지 확인하려고한다. 그렇지 않다면 더 자세한 정보를 게시 할 것입니다! 감사! – Camillo