2012-12-01 35 views
0

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

例如: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短暂的思考,通过使用密钥和不保存它,我将能够重新开始在一个新的事件。没有骰子。

回答

0

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

编辑:

如果你想拥有运动员的特殊用户自定义为了使每个事件解决方法之一是创建具有一对一的关系既事件和运动员和一个新的实体EventAthletes还包含显示顺序属性。

END EDIT

顺便说一句,使用的是具有核心数据的额外数据阵列用于在表浏览显示。你知道你可以使用NSFetchedResultsController更有效地管理你的表格视图数据源吗?

+0

我没有在这里使用NSFetchedResultsController,因为MC在加载时传递给视图。在viewDidLoad中,我调用NSMutableArray * sortedAthletes = [[NSMutableArray alloc] initWithArray:[event.eventAthletes allObjects]]; \t [sortedAthletes sortUsingDescriptors:sortDescriptors]; \t self.eventAthletes = sortedAthletes;只有在这种观点下与这种关系一起工作。在这个阶段,存在一个事件,运动员被分配到该事件中,并且我想让最终用户能够订购运动员。我遇到的问题是有序的运动员在每个事件中都保持这个顺序。 – Mike

+0

@Mike如果你想每个事件的自定义订单,请参阅我的编辑。 – Mundi

+0

我希望有一个更简单的方法,但这是我的想法。非常感谢您的帮助! – Mike