如果您可以定位iOS 5.0或更高版本,那麼您可以使用NSOrderedSet
來維護對象的順序。請記住,使用此方法的效率遠低於我在下面建議的其他方法(按照Apple的文檔)。欲瞭解更多信息,請查詢Core Data Release Notes for iOS 5。
如果您需要在5.0之前支持iOS版本,或者想要使用更高效的方法,那麼您應該在實體中創建一個額外的整數屬性,並手動維護其中的實體對象的索引添加或重新排列。當顯示對象的時候,你應該根據這個新屬性對它們進行排序,然後你就全部設置好了。例如,這是你的moveRowAtIndexPath
方法應該怎麼那麼像:
- (void)moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath sortProperty:(NSString*)sortProperty
{
NSMutableArray *allFRCObjects = [[self.fetchedResultsController fetchedObjects] mutableCopy];
NSManagedObject *sourceObject = [self.fetchedResultsController objectAtIndexPath:sourceIndexPath];
// Remove the object we're moving from the array.
[allFRCObjects removeObject:sourceObject];
// Now re-insert it at the destination.
[allFRCObjects insertObject:sourceObject atIndex:[destinationIndexPath row]];
// Now update all the orderAttribute values for all objects
// (this could be much more optimized, but I left it like this for simplicity)
int i = 0;
for (NSManagedObject *mo in allFRCObjects)
{
// orderAttribute is the integer attribute where you store the order
[mo setValue:[NSNumber numberWithInt:i++] forKey:@"orderAttribute"];
}
}
最後,如果你發現這個太多的體力勞動,那麼我真的建議使用免費的Sensible TableView框架。該框架不僅會自動爲您維護訂單,還會根據您實體的屬性及其與其他實體的關係生成所有表視圖單元格。在我看來,絕對是一個很棒的節省時間。我也知道另一個庫叫UIOrderedTableView,但我從來沒有使用過,所以我不能推薦它(前一個框架也更受歡迎)。
謝謝@Alex Terente – VasuIppili 2013-03-26 07:37:27