我收到了CoreData和NSPredicate的一些意外行爲。在大型數據庫中,我有不同的託管對象與另一個託管對象相關。但是,我遇到以下問題。當給出一個id(NSNumber,作爲NSString給這個函數)時,我不會得到結果,除非我先保存整個上下文。我不想這麼做,因爲它花費了太多時間(因爲它是一大組數據)。該代碼是:在覈心數據中搜索ID
- (DOSite *) findSite:(NSString *) siteId {
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(id = %@)", siteId];
[NSFetchedResultsController deleteCacheWithName:nil];
[[self fetchedResultsController].fetchRequest setPredicate:predicate];
NSError *fetchError;
if (![[self fetchedResultsController] performFetch:&fetchError]) {
// Handle the error.
// This is a serious error and should advise the user to restart the application
NSLog(@"Fetching data error: %@", [fetchError localizedDescription]);
}
if([[[self fetchedResultsController] fetchedObjects] count] == 0){
return NULL;
}
return (DOSite *)[[[self fetchedResultsController] fetchedObjects] objectAtIndex:0];
}
所以,當我添加項目(使用+[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]
)進行搜索的x個上的所有項目返回項目適量。
當搜索一個字符串(例如predicateWithFormat:@"(name LIKE %@)"
)時,我得到了肯定的結果,但是當使用上面的代碼predicateWithFormat:@"(id = %@)
時,我得到零結果。
我可以得到結果的唯一方法是保存整個上下文,然後執行fetchRequest,然後突然它工作。
所以一定要有一些小的東西,我在搜索id時做錯了,我似乎盲目地找到它並花費兩天的時間來縮小它到這一點。有沒有人可以給我一些建議呢?
是的,那是我在Objective-C中必須習慣的。在這種情況下,這不是問題,但我會在財富釋放中改變它。感謝您指出! –