Проблема в том, что внутри вашего цикла вы меняете значения temp1
и temp2
.Когда вы отпускаете их после завершения цикла, вы не освобождаете объекты, созданные до начала цикла.Вместо этого вы пытаетесь освободить какой-то другой объект, который вы не выделяли / инициализировать (в этой части кода).Вероятно, это то, что вызывает ваш сбой.
Я бы предложил попробовать что-то вроде:
TopTenDataClass *temp1 = nil;
TopTenDataClass *temp2 = nil;
for (int i = 0; i < [topTenDataArray count]; i++)
{
int minIndex = i;
for (int j = i; j < [topTenDataArray count]; j++)
{
temp1 = [topTenDataArray objectAtIndex:minIndex];
temp2 = [topTenDataArray objectAtIndex:j];
if ( temp2.timeInSeconds < temp1.timeInSeconds)
minIndex = j;
}
[topTenDataArray exchangeObjectAtIndex:minIndex withObjectAtIndex:i];
}
Вам не нужно присваивать новый экземпляр объекта temp1
и temp2
перед циклом, потому что вы просто перезаписываетеих значения внутри вашего цикла.
Также обратите внимание, что если topTenDataArray
содержит только один элемент, ваш код будет вызывать [topTenDataArray exchangeObjectAtIndex:0 withObjectAtIndex:0]
, что также может быть проблемой (документация API * 1015)* не говорите, что вы не можете обменять объект на себя, но они также не говорят, что вы можете).