我在使用UITableView時讓我的核心數據實體玩起來很不錯並且有點麻煩。如何使用核心數據維護UITableView中的顯示順序?
我已經在StackOverflow上通過了很多教程和其他問題,但似乎沒有一個清晰或優雅的方式來做到這一點 - 我真的希望我失去了一些東西。
我有一個單一的Core Data實體,它上面有一個int16屬性,叫做「displayOrder」。我使用已在「displayOrder」上排序的NSFetchRequest來返回我的UITableView的數據。除了重新排序之外,所有東西都受到尊重。這裏是我的(低效率)moveRowAtIndePath方法:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSUInteger fromIndex = fromIndexPath.row;
NSUInteger toIndex = toIndexPath.row;
FFObject *affectedObject = [self.fetchedResultsController.fetchedObjects objectAtIndex:fromIndex];
affectedObject.displayOrderValue = toIndex;
[self FF_fetchResults];
for (NSUInteger i = 0; i < [self.fetchedResultsController.fetchedObjects count]; i++) {
FFObject *otherObject = [self.fetchedResultsController.fetchedObjects objectAtIndex:i];
NSLog(@"Updated %@/%@ from %i to %i", otherObject.name, otherObject.state, otherObject.displayOrderValue, i);
otherObject.displayOrderValue = i;
}
[self FF_fetchResults];
}
任何人都可以指出我的示例代碼好位的方向,或者看到什麼我做錯了嗎? tableview顯示更新OK,我可以看到我的日誌消息displayOrder屬性正在更新。這只是不一致的保存和重新加載,並且對於這個實現感覺非常「不合適」(除了所有FFObjects的浪費迭代之外)。
預先感謝您提供任何建議。
輝煌!這工作完美。我非常盯着原始代碼太久 - 謝謝你的幫助。 – 2009-11-02 09:17:32
這應該並行執行與http://stackoverflow.com/questions/1077568/how-to-implement-re-ordering-of-coredata-records/2013070#2013070 – 2010-01-28 20:09:47
如果項目可以被刪除,這不工作。在刪除行時,您還必須確保更新訂單字段。 – Kamchatka 2010-06-13 22:30:22