我從核心數據庫中獲取數據並將它們呈現在UITableView
中。我使用NSFetchedResultController
來獲取數據。我希望用戶能夠在數據庫中進行搜索,並使用NSPredicate
。NSFetchedResultsController 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
莫名其妙...
謝謝!我從假期回來,我終於得到它的工作,感謝你!另外,對於那些有類似問題的人,我可以說我將內容導入到我的Core Data中的不同線程中,並使用NSNotification。奇蹟般有效。 – Mikael 2011-01-03 10:18:04