我被困在对核心数据关系进行排序上。我有一个对多关系,但我无法克服的问题是,在一个视图中重新排序关系实体会在它们所属的每个视图中重新排序它们。
示例:People
被添加到activity1
并使用moveRowAtIndexPath
方法随机排序。这些人被添加到activity2
,并且被命令相同的activity1
。我怎样才能阻止这种情况?
相关代码:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
NSUInteger fromRow = [fromIndexPath row];
NSUInteger toRow = [toIndexPath row];
id object = [[eventAthletes objectAtIndex:fromRow] retain];
[eventAthletes removeObjectAtIndex:fromRow];
[eventAthletes insertObject:object atIndex:toRow];
int i = 0;
for (object in eventAthletes)
{
[object setValue:[NSNumber numberWithInt:i++] forKey:@"athleteDisplayOrder"];
}
[self saveContext];
[object release];
}
我更新了模型并使属性athleteDisplayOrder
瞬态的,认为通过使用密钥而不保存它,我将能够在新事件中重新开始。没有骰子。
相同的顺序是预期行为。如果要"随机化"顺序,则必须通过重新分配随机athleteDisplayOrder
属性来显式执行此操作。
编辑:
如果要为每个项目定义一个特殊的用户可定义的运动员顺序,解决此问题的一种方法是创建一个新的实体EventAthletes
,该实体具有事件和运动员的一一关系,并且还包含显示顺序属性。
结束编辑
顺便说一句,您正在使用一个额外的数据数组,其中包含要在表视图中显示的核心数据。您是否知道可以使用NSFetchedResultsController
更有效地管理表视图数据源?