2010-05-25 95 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"];