2012-09-23 5 views
3

저는 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

+0

를 사용하여 어레이를 필터링 fetchedResultsController에 대한 맞춤 getter가 있습니까? 그럴 경우 해당 코드의 모양은 무엇입니까? – Hunter

+0

안녕하세요. 헌터 님, 저는 처음 아이디어가 있다고 생각합니다. 문제. 두 TableViews에 대해 하나의 FRC를 사용하고 있습니다. 처음에는 분리 된 것으로 이해하지 못했습니다 (처음에는 searchBar). 오늘 밤 나는 2 개의 FRC로 구현하려고하고 그것이 작동하는지 확인하려고한다. 그렇지 않다면 더 자세한 정보를 게시 할 것입니다! 감사! – Camillo

답변

0

을 글로벌 선언 어레이의 모든 상세 정보를 가져 ... 검색 함수 '자 NSPredicate'

관련 문제