У меня есть класс (Piece), у которого есть свойство NSMutableArray с именем attachBlocks.
Всякий раз, когда часть инициализируется, 4 объекта Block инициализируются и помещаются в attachBlocks.
В то же время, в своем классе контроллеров, перед тем, как выпустить кусок, я добавляю все блоки из piece.attachedBlocks в NSMutableArray в моем контроллере, называемом boardBlocks. Поэтому boardBlocks имеет каждый блок на плате в своем массиве (отсюда и название).
В методе моего конструктора я пытаюсь отсортировать этот массив boardBlock, чтобы все объекты на плате сортировались снизу справа вверху слева, поэтому после (0,1) будет блок (0,0), и (1,0) будет следовать после (2,5).
Вот код для моей сортировки:
//In Block.m:
- (NSComparisonResult)compareTo:(Block *)other
{
if (self.location.y < other.location.y && self.location.x < other.location.x)
{
return NSOrderedAscending;
}
else if (self.location.y == other.location.y && self.location.x == other.location.x)
{
return NSOrderedSame;
}
else
{
return NSOrderedDescending;
}
}
//In my controller.m
- (void)sortTheArray
{
NSArray *sortedBlocks = [boardBlocks sortedArrayUsingSelector:@selector(compareTo:)];
for (Block *b in boardBlocks)
{
NSLog(@"%d, %d", b.location.x, b.location.y);
}
for (Block *b in sortedBlocks)
{
NSLog(@"(%d, %d)", b.location.x, b.location.y);
}
}
Как я уже говорил, каждый раз, когда создается кусок объекта, 4 объекта блока инициализируются один за другим.
Когда я делаю это после того, как одна часть была создана и выпущена, сортировка работает. Однако, когда я пытаюсь использовать более одного куска, я получаю следующий результат:
boardBlocks:
(8, 17)
(7, 18)
(8, 18)
(9, 18)
(6, 17)
(7, 17)
(5, 18)
(6, 18)
Первая часть состоит из блоков в первых четырех координатах.
Второй кусок состоит из блоков по четырем вторым координатам
Результат после сортировки:
(6, 18)
(5, 18)
(7, 17)
(6, 17)
(9, 18)
(8, 18)
(7, 18)
(8, 17)
Результат должен быть:
(9, 18)
(8, 18)
(7, 18)
(6, 18)
(5, 18)
(8, 17)
(7, 17)
(6, 17)
Теперь вы можете видеть, что он правильно сортирует каждый фрагмент по одному (первые 4 координаты сортируются правильно, а последние 4 сортируются правильно) .. но вместе они сортируются неправильно, потому что (9, 18 ) должен стоять перед каждой другой координатой там.
Сортировка происходит, когда объекты инициализируются в массив автоматически или когда вызывается sortedArrayUsingSelector:
Я не могу обернуть голову, почему он сортирует первые четыре, затем вторые четыре, но не весь массив в целом.