2012-01-13 80 views
2

我有一個CoreData存儲,並且希望維護一個由REST服務提供的排序順序。 CoreData中的對象具有​​屬性,並且對REST提供的(GUID)數組進行排序。我想在從CoreData中獲取對象之後保持這種類型。CoreData:基於使用IN的謂詞/數組進行排序

我使用以下NSPredicate我取:

[NSPredicate predicateWithFormat:@"guid IN %@", wishlistGUIDs];

其中wishlistGUIDs是對的GUID相關對象的REST提供的陣列。

有沒有辦法在保持wishlistGUIDs順序的同時獲取結果?我已經探索了使用NSSortDescriptor,並通過遍歷wishlistGUIDs來組裝一個瘋狂的排序描述符數組,但它看起來過於複雜並且只是「錯誤的」。

回答

0

你能限制自己到iOS 5/Lion嗎?這對於一個有序的關係看起來很好用(作爲NSOrderedSet出現)。你將有一個核心數據實體「願望清單」,其中將包含有序的GUID。除了這個,我認爲你必須做一些醜陋的事情,比如維護你自己的GUID列表序列號。

0

這裏是額外的步驟,我把解決這一相同類型的問題:

定義的方法:

NSInteger gidSort(Guild* num1, Guild* num2, void *context) { 
    NSArray* wishlistGUIDs = (NSArray*)context; 
    int v1 = [wishlistGUIDs indexOfObject:num1.guid]; 
    int v2 = [wishlistGUIDs indexOfObject:num2.guid]; 
    if (v1 < v2) 
     return NSOrderedAscending; 
    else if (v1 > v2) 
     return NSOrderedDescending; 
    else 
     return NSOrderedSame; 
} 

然後你從提取後的結果:

NSArray* resorted = [results sortedArrayUsingFunction:gidSort context:wishlistGUIDs]; 
相關問題