У меня есть массив из segments
, у каждого из них есть массив связанный с ним fighters
.Почему основные данные NSSet инвертируют мой массив?
Отношения могут быть описаны таким образом:
One `segment` can have many `fighters`
объекты находятся под управлением основных данных.
При отображении в виде таблицы каждая ячейка имеет две кнопки, поэтому пользователь может выбрать истребитель из отдельного контроллера вида; и тогда, когда он вернется, он обновит отношения между истребителями сегмента.
Потому что отношение segment.fighters
не изменяет NSSet
, мне нужно изменить его так, чтобы;
Если
Пользователь нажимает левую кнопку, это делает вывод о том, что первым объектом в segment.fighter настоящее время выбрали
Пользователь нажимает правую кнопку, он делает вывод, что последний объект в сегменте .fighter выбирается
Когда я прихожу, чтобы обновить отношения, иногда; в зависимости от последовательности кнопок, нажатых пользователем; позиции объектов в NSSet
инвертируются.
т.е.
Иногда боец, который должен быть в положении 0 обменена с бойцом в положении 1, когда это никогда не должно произойти.
Мой код выглядит следующим образом;
NSArray *currentFighters = [[segment valueForKeyPath:@"fighters"] allObjects];
NSLog(@"----- current fighters ---- ");
for (FCFighter *fighter in currentFighters) {
NSLog(@"%@", [fighter description]);
}
NSMutableArray *currentFightersMutable = [currentFighters mutableCopy];
[currentFightersMutable replaceObjectAtIndex:fighterIdx withObject:pickedFighter];
NSArray *updatedFighters = [currentFightersMutable copy];
NSLog(@"----- updated fighters ---- ");
for (FCFighter *fighter in updatedFighters) {
NSLog(@"%@", [fighter description]);
}
[segment setFighters:[NSSet setWithArray:updatedFighters]];
NSLog(@"----- [segment fighters] ---- ");
for (FCFighter *fighter in [[segment valueForKeyPath:@"fighters"] allObjects]) {
NSLog(@"%@", [fighter description]);
}
Я использую NSMutableArray, чтобы заменить точный объект в массиве.
Я могу доказать, что он работает с помощью бревен
Picked fighter - AJ Fonseca
----- current fighters ----
AJ Matthews
A Sol Kwon
----- updated fighters ----
AJ Fonseca
A Sol Kwon
----- [segment fighters] ---- // NOTE it has swapped them, but why?
A Sol Kwon
AJ Fonseca
-[FCSegmentTableViewCell configureCellWithSegment:]
#0 -- A Sol Kwon
#1 -- AJ Fonseca
Однако, когда он попадает в сегмент выхода бойцов, бойцы поменялись местами; но мой вопрос:
Почему NSSet инвертирует массив?
Большое спасибо
Кроме того, я хочу только обновить конкретный боец в данном сегменте; а не весь массив для целей скорости. – zardon