2013-06-01 105 views
1

在iOS6 coredata上,我試圖構建一個類似於幻燈片的應用程序(按照特定順序逐個查看數據庫實體)。這很容易,我甚至可以使用NSFetchedResultsController。現在,問題是,在某些情況下,我會得到一個實體,並且我需要在不知道該實體的索引的情況下「跳」到該實體。通過屬性值查找對象索引

一個潛在的解決方案是逐個循環遍歷實體。我只是想知道是否有另一種方法來獲得這個實體的「索引」。下面是說明這一問題的僞代碼:

NSFetchRequest

  • 排序實體:通過上次更新日期所需的實體類型,爲了
  • **需要找出一個實體的上面所列內容索引實體ID或唯一的ID。

在SQL中,我會做類似

select ROWINDEX 
from (
    select ROWNUM as ROWINDEX, uid 
    from entity_table 
    order by lastupdatedate desc 
) 
where uid="abc" 

感謝。

回答

1

我可能不完全理解你。然而。 FetchedResultsController有一個屬性.fetchedObjects是一個數組。我認爲你可以隨時在該陣列中移動,以做你需要的任何事情。

你沒有指出你想如何識別你的實體;你可以肯定使用暴力方法,因爲你已經建議找到你想要的任何東西:

for (NSManagedObject *obj in fetchedResultsController.fetchedObjects) 
{ 

} 

如果結果集很小。如果結果集太大而無法高效完成,則可以嘗試使用NSPredicate來過濾fetchedObjects數組,這可能更可取。看到Using NSPredicate with Core Data NSFetchedResultsController

+0

好的指數。謝謝。正則表達式。這對我有用。由於我是CoreData的新手,只是想確保我沒有錯過任何東西。 –

+1

NSFetchedResultsController還有一個'indexPathForObject:'方法,在這裏可能很有用。 –

+0

馬丁,你是對的!我現在使用這種方法。還沒有測試過。但那看起來正是我所要找的。謝謝。 –

0

的鏈接假設你有這些排序的所有對象的數組,你可以找到以下方式

NSArray *objects = ...//Sorted Array 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uid=='abc'"]; 
NSUInteger index = [objects indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
    return [predicate evaluateWithObject:obj]; 
}];