2
我正在使用Apple提供的標準代碼執行核心數據提取,它在提取方法的開始處具有以下語句。在覈心數據中執行新的提取iphone
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController_ != nil) {
return fetchedResultsController_;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:self.entityName inManagedObjectContext: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:self.sortFieldName ascending:YES];
NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
if(predicate != nil)
[fetchRequest setPredicate:predicate];
// 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:self.managedObjectContext sectionNameKeyPath:sectionKeyName cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
aFetchedResultsController = nil;
[fetchRequest release];
fetchRequest = nil;
[sortDescriptor release];
[sortDescriptors release];
NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {
}
return fetchedResultsController_;
}
第一次,fetchedResultsController獲取所需的信息。但在此之後,我正在爲此結果設置一個謂詞。所以,我希望下次考慮我的謂詞。如果進入上面的代碼,它會立即出來,因爲舊的值不是零。
爲了克服這個問題,設置謂語之後,我做
fetchedResultsController_ = nil;
該工程確定,但在fetchedResultsController只要fetchRequest被分配給泄漏。
有沒有更好的方法來重新執行抓取或避免泄漏?
下劃線是什麼意思? – RyeMAC3 2011-06-16 01:38:54
無論如何,這解決了我的問題。我在運行該代碼的導航欄中添加了一個「刷新」按鈕,然後添加了新的提取。 – RyeMAC3 2011-06-18 02:48:29