2010-05-25 62 views
1

我有一个全新的Objective-C类,名为test测试类有一个实例变量,称为someValue,其中包含一个整数。返回具有最高'someValue'实例变量的类实例的名称

我创建了5个称为aTest,bTest,cTest,dTest和eTest的测试类实例。 someValue的适当综合和财产声明已到位。

有最高someValue中值了所有现有的测试类实例的返回类实例的名称的干净的方式?在我的例子中,类实例的数量可能不同于5。

注意我不在乎的价值是什么,我只是想返回类实例的最高“someValue中”实例变量。

我已经尝试了几个NSMutable数组,但只能得到值不是包含它的变量的名称。

在此先感谢

+1

你是什么意思的类实例的名称?实例没有名字,除非您给他们一个名称属性。 – drawnonward 2010-05-25 05:50:50

回答

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 2010-05-25 07:02:07

+0

@Timbo:选择器中项目数的选择器数组不是'长度'。在这样的例子中总会有一个输入错误的机会,但是它应该很明显是什么意图,然后你可以检查NSArray类的引用来找到正确的选择器。 – JeremyP 2010-05-25 07:45:48

+0

好酷我很新,感谢所有耐心:) – Timbo 2010-05-25 12:13:56

3

如果我在读你的问题正确,您已经定义了一组变量(ATEST, bTest,cTest,dTest和eTest)是您的测试类的实例。

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"];