0

我收到了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時做錯了,我似乎盲目地找到它並花費兩天的時間來縮小它到這一點。有沒有人可以給我一些建議呢?

回答

0

問題是我給了謂詞NSString如上所述。當將其更改爲int(即predicateWithFormat:@"(id == %i)")時,出於某種原因它可以正常工作。

0

這可能無法正常工作,但是您是否嘗試過在實體中使用比「id」更復雜的名稱(如「SiteID」)?有時非常短的名稱與其他系統屬性重疊,並導致奇怪的問題。

+0

是的,那是我在Objective-C中必須習慣的。在這種情況下,這不是問題,但我會在財富釋放中改變它。感謝您指出! –