2010-05-25 8 views
1

У меня есть новый класс Objective-C под названием test. Тест test имеет переменную экземпляра под названием someValue, которая содержит целое число.Верните имя экземпляра класса с наивысшей переменной экземпляра «someValue»

Я создаю 5 экземпляров тестового класса под названием aTest, bTest, cTest, dTest и eTest. Соответствующие декларации о синтезе и свойствах для someValue на месте.

Есть чистый способ возвращения имени экземпляра класса с самым высоким SomeValue значение из всех существующих экземпляров тестов класса? Количество экземпляров класса может меняться от 5 в моем примере.

Примечание Меня не волнует то, что значение, я просто хочу, чтобы вернуть имя экземпляра класса с самым высоким «SomeValue» переменной экземпляра.

Я пробовал несколько NSMutable массивов, однако может получить значение не имя переменной, которая его содержит.

Заранее спасибо

+1

Что вы подразумеваете под именем экземпляра класса? У экземпляра нет имен, если вы не дадите им свойство имени. – drawnonward

ответ

0

Если предположить, что объект имеет имя класса «YourObject»:

NSArray *objects = [NSArray arrayWithObjects:aTest, bTest, cTest, dTest, eTest, nil]; 
int i = [objects count]; 
int max = 0; 
YourObject *highest; 
while (i--) 
{ 
    int current = ((YourObject *)[objects objectAtIndex:i]).someValue; 
    if (current > max) 
    { 
     max = current; 
     highest = (YourObject *)[objects objectAtIndex:i]; 
    } 
} 

// highest will be reference to object with highest someValue 
NSLog(@"%@", highest); 
+0

Typeoneerror, который выглядит довольно совершенным, я просто получаю сообщение об ошибке NSArray, которое может не реагировать на -length, что означает, что цикл не знает, сколько раз повторять – Timbo

+0

@Timbo: Селектор для количества элементов в array - 'count' not' length'. В подобном примере всегда есть опечатка, но должно быть довольно очевидно, что это за намерение, и тогда вы могли бы проверить ссылку класса NSArray, чтобы найти правильный селектор. – JeremyP

+0

Ok cool Я новичок в этом, спасибо всем за ваше терпение :) – Timbo

3

Если я читаю ваш вопрос правильно, вы определили кучу переменных (ATEST, bTest, cTest, dTest и eTest), чтобы быть экземплярами вашего test класс.

test *aTest = [[test alloc] initWithSomeValue:5]; 
test *bTest = [[test alloc] initWithSomeValue:42]; 
/* ... and so on ... */ 

Переменные имена не имеют значения для компьютера. Весь компилятор заботится о том, что каждый из них (потенциально) уникален. После компиляции кода все имена переменных полностью удаляются; все, что осталось, это числа, представляющие ячейки памяти каждого из них.

Вы используете только именованные переменные в качестве способа написания кода в удобном для восприятия человеком образом. Если вы хотите связать строку с каждым экземпляром вашего класса test, вам необходимо явно сделать это с помощью экземпляра экземпляра NSString. Тогда вы должны были бы написать:

test *aTest = [[test alloc] initWithSomeValue:5]; 
[aTest setName:@"a"]; 
test *bTest = [[test alloc] initWithSomeValue:42]; 
[bTest setName:@"b"];