有什麼方法可以重新排列使用核心數據的表視圖的部分,而無需使用排序描述符?
我需要的排序方式不是按字母順序排列,並且會隨時間而變化(我已經閱讀過,使用核心數據,不能使用自定義選擇器作爲排序描述符,所以默認選擇器不能幫助我)。如何在使用核心數據時重新排列部分
我有一個方法,當「部分重新排序」應該發生時被調用,我不知道是否有某種「索引向量」,我可以修改,所以部分由該索引或類似的東西排序。
感謝您的幫助!
有什麼方法可以重新排列使用核心數據的表視圖的部分,而無需使用排序描述符?
我需要的排序方式不是按字母順序排列,並且會隨時間而變化(我已經閱讀過,使用核心數據,不能使用自定義選擇器作爲排序描述符,所以默認選擇器不能幫助我)。如何在使用核心數據時重新排列部分
我有一個方法,當「部分重新排序」應該發生時被調用,我不知道是否有某種「索引向量」,我可以修改,所以部分由該索引或類似的東西排序。
感謝您的幫助!
你這裏有兩種選擇:要在覈心數據訂購
任何事情(和,通過擴展,使用NSFetchedResultsController
),您需要在您的數據,並使用排序描述符莫名其妙模型。
您聲明(但不解釋)「缺省的[排序描述符]沒有幫助」你。我想這意味着使用模型中包含的數據不足以進行重新排序。在這種情況下,您將不得不爲相關實體引入一個新屬性。這可能聽起來太費勁了,但通常情況並非如此。
可以從讀取的結果控制器的表格視圖的datasource
更改爲自己方案(例如,用陣列)。當然,這會影響內存,但這可能是最簡單的方法。
編輯
後你重述問題(圓形矢量排序)這裏是一個建議:你可以使用sortDescriptorWithKey:ascending:comparator:
構建一種描述符,提供正是你想要的結果。 (警告:未經測試的代碼)
int centerNumber = 2; // or whatever your method returns
NSSortDescriptor *descriptor = [NSSortDescriptor
sortDescriptorWithKey:@"number"
ascending:YES
comparator:^(int a, int b) {
NSComparisonResult r;
if (a == b) r = NSOrderedSame;
else if (a == centerNumber) r = NSOrderedAscending;
else if (b == centerNumber) r = NSOrderedDescending;
else if (abs(a-c) == abs(b-c))
if (a<b) r = NSOrderedDescending;
else r = NSOrderedAscending;
else
if (abs(a-c) > abs(b-c)) r = NSOrderedAscending;
else r = NSOrderedDescending;
return r;
}];
讓我知道,如果它的工作原理。
EDIT 2
如果你需要的NSNumber(這是你的數據是如何存儲的最有可能的),也許這個作品:
...^(id x, id y) {
int a = [x intValue];
int b = [y intValue];
...
}...
最後編輯
如果比較不工作,插入NSComparisonResult
作爲結果類型:
...comparator:^NSComparisonResult(id x, id y){....
嗯,也許我錯過了有關排序描述符的內容。我的模型中有一個存儲數字(1到5)的屬性,我想從需要重新排序時觸發的方法開始排序。例如,如果方法顯示爲「2」,我希望這些部分按「2,3,1,4,5」排序。也就是說,首先是方法所說的那個,然後是「圓形矢量」方式中的+1和-1,即+2 -2等。這可以使用默認的排序描述符來完成嗎? – David
它可以通過使用自定義比較選擇器來完成。看我的編輯。 – Mundi
好吧,我試圖設置提取的結果控制器使用這種排序描述符處理請求,但它不執行比較器!我已經測試了這個比較器,它的工作原理,如果我把一個NSLog裏面,它會被調用。但是,將它設置爲比較器時,它不會被調用,這些部分不會被重新排序,控制檯中也沒有NSLog。我確定我正確設置了獲取的結果控制器(排序描述符的「升序」參數)。問題在哪裏? :S – David