2010-12-21 51 views
2

我從核心數據庫中獲取數據並將它們呈現在UITableView中。我使用NSFetchedResultController來獲取數據。我希望用戶能夠在數據庫中進行搜索,並使用NSPredicateNSFetchedResultsController NSPredicate不更新

數據顯示在UITableView中,一切正常,直到我將NSPredicate設置爲NSFetchedResultController

我在ViewDidLoad方法使用:

self.fetchedResultsController = nil; 
fetchedResultsController_ = nil; 

NSError *error = nil; 
if (![[self fetchedResultsController] performFetch:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    exit(-1); 
} 

,當用戶輸入了從UITextField文本,該文本將前往新NSPredicate

這是當搜索開始做:

NSPredicate *pred = nil; 
pred = [NSPredicate predicateWithFormat:@"(Designation BEGINSWITH '22')"]; 
[fetchedResultsController_.fetchRequest setPredicate:pred]; 

NSError *error = nil; 
if (![[self fetchedResultsController] performFetch:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    exit(-1); 
} 

[tView reloadData]; 

現在我用@"(Designation BEGINSWITH '22')"僅用於測試。

這是我的NSFetchedResultsController:

- (NSFetchedResultsController *)fetchedResultsController { 

    if (fetchedResultsController_ != nil) { 
     return fetchedResultsController_; 
    } 

    /* 
    Set up the fetched results controller. 
    */ 
    // Create the fetch request for the entity. 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:importContext];//self.managedObjectContext 
    [fetchRequest setEntity:entity]; 

    // Set the batch size to a suitable number. 
    [fetchRequest setFetchBatchSize:20]; 

    // Edit the sort key as appropriate. 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Designation" ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Edit the section name key path and cache name if appropriate. 
    // nil for section name key path means "no sections". 
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:importContext sectionNameKeyPath:nil cacheName:@"Root"]; //self.managedObjectContext 

    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 

    [aFetchedResultsController release]; 
    [fetchRequest release]; 
    [sortDescriptor release]; 
    [sortDescriptors release]; 

    return fetchedResultsController_; 
}  

的問題是,所獲取的數據保持不變,不管我怎樣,或者設置一個謂語。如果我在viewDidLoad中設置一個謂詞,它將起作用,但如果我再次嘗試過,則無法獲得新結果。我使用「importContext」來批量導入我的CoreData。

任何想法?

在此先感謝!

更新: 好的,這是我發現的。我有一個importContext,我進行批量導入。而對於fetchController我使用self.managedObjectContext。這就是爲什麼它不起作用,所以我必須使self.managedObjectContext有相同的東西,我的importContext莫名其妙...

回答

4

您正在使用緩存(@「根」)...嘗試將它設置爲零,這可能防止崩潰。您不應該緩存意圖被預測的FetchedResultsControllers。

+0

謝謝!我從假期回來,我終於得到它的工作,感謝你!另外,對於那些有類似問題的人,我可以說我將內容導入到我的Core Data中的不同線程中,並使用NSNotification。奇蹟般有效。 – Mikael 2011-01-03 10:18:04

相關問題