moveRowAtIndexPath和CoreData关系

时间:2012-12-01 16:12:10

标签: xcode core-data uitableview

我坚持订购核心数据关系。我有一个多对多的关系,但我无法克服的问题是,在一个视图中重新排序关系实体会在它们所属的每个视图中重新排序它们。

示例: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暂时认为通过使用密钥并且不保存它,我将能够在新事件中重新开始。没有骰子。

1 个答案:

答案 0 :(得分:0)

相同的排序是预期的行为。如果要“随机化”订单,则必须通过重新分配随机athleteDisplayOrder属性来明确执行此操作。

修改

如果您希望为每个事件设置一个特殊的用户可定义的运动员顺序,解决此问题的方法是创建一个新的实体EventAthletes,该实体与事件和运动员有一对一的关系,并且还包含显示顺序属性。

结束编辑

顺便说一下,您正在使用带有核心数据的额外数据阵列,以便在表格视图中显示。您是否知道可以使用NSFetchedResultsController更有效地管理表视图数据源?