2013-07-03 56 views
-6

我有一個NSArray在我的ViewDidLoad animalz = [NSArray arrayWithObjects:@"rabbit",@"deer",@"ox", @"horse", @"cow", nil];這樣宣佈,我有一個UIView子類,我寫了一個NSString並重新排列它。用戶按下一個按鈕,與按鈕相關聯的數字就是我需要的數組中的數字(例如,如果數字是三,那麼我需要值「馬」,但如果按鈕是4,那麼我需要「牛「);目前這些數字是以long int的形式出現的,我無法在nsarray中獲得相應的值。我試着做:NSArray的值NSString

selectedani //this is the long int that represents the button 
    int indexani = [animalz objectAtIndex:selectedani]; 
    NSString *anistr = [NSString stringWithFormat:@"%i",indexani]; 
    [self rearrange:btistr]; 

這不會給我任何編譯器警告或錯誤,但當我按下按鈕,應用程序崩潰。我做錯了什麼,我該如何解決它?

+1

崩潰時的調用堆棧是什麼?調試器控制檯中的輸出是什麼? –

+3

這只是錯誤的:'int indexani = [animalz objectAtIndex:selectedani];'objectAtIndex將始終返回一個對象指針(或nil)。 –

+0

@AdamRosenfield錯誤是:線程1:程序接收到的信號:EXC_BAD_ACCESS – user2510806

回答

2
selectedani //this is the long int that represents the button 
NSString *anistr = [animalz objectAtIndex:selectedani]; 
[self rearrange:anistr]; 
+0

我試過了,我的應用又崩潰了。我收到了錯誤「線程1:編程接收到的信號:EXC_BAD_ACCESS」 – user2510806

+0

你做了什麼來調試崩潰?你有沒有在你的代碼中設置斷點,並通過這段代碼來看看你是否能夠通過它? –

+0

好吧,當我只有長整型它工作正常。只有當我嘗試訪問數組時,它不起作用。 – user2510806

1

animalzNSString對象的數組,但是當您調用[animalz objectAtIndex:selectedani]時,將結果賦值給int。

+0

我該如何解決這個問題? – user2510806

0

首先,你分配selectedani你使用它之前?如果沒有,那麼你不應該使用selectedani。它可能是內存位置或按鈕的某些其他屬性可能會有所不同。

[animalz objectAtIndex:selectedani] 

返回一個對象,投射這種對象不是你想要的,當然這不是一個索引過一個int。

你能做什麼?分配一個標籤號動態相應的按鈕,像

button.tag = 1;//or something like it 

然後在IBAction爲方法檢索標籤,並用它來分析你的陣列。

- (IBAction)buttonPressed:(id)sender 
{ 
    UIButton *pressedBtn = (UIButtton *)sender; 
    NSString *anistr = [animalz objectAtIndex:pressedBtn.tag]; 

    //do what you want to do with the string 
    [self rearrange:anistr]; 
} 

在這種情況下,聲明animalz作爲實例變量或屬性。