2012-07-08 71 views
0

我正在嘗試使用以下代碼找到核心數據記錄的索引,其中[self numItems]返回記錄數。代碼平均需要大約0.2秒才能執行。我有興趣加快速度。提前致謝。有沒有一種有效的方法來確定特定核心數據記錄的索引

- (NSInteger) indexWithTaskID:(NSInteger)eventID 
{ 
    for (NSInteger i=0;i<[self numItems];i++) { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0]; 
     NSManagedObject *managedObject = [self.fetchedResultsController 
             objectAtIndexPath:indexPath]; 
     NSInteger myEventID = [(NSNumber *)[managedObject valueForKey:@"eventID"] intValue]; 

     if (myEventID == eventID) { 
      return i; 
     } 
    } 
    return -1; 
} 
+0

你稱之爲什麼情境?如果你有完整的managedObject,你可以調用'[self.fetchedResultsController indexPathForObject:managedObject]'。 – joshOfAllTrades 2012-07-08 03:00:32

+0

當這個方法被調用時,我沒有特定的managedObject。我只有eventID。謝謝。 – 0x141E 2012-07-08 03:16:02

+0

我仍然對上下文感到好奇。 – joshOfAllTrades 2012-07-08 03:18:12

回答

0

這是一個有點落後的東西,這是用於設置,我會盡量避免需要,如果你有大量的數據發現這個指標,但如果你真的需要知道索引,那麼你可能是堅持這個搜索。如果謂詞是排序的,那麼你可以做更好的線性搜索,也許simple binary search可以做出足夠的改進。

相關問題