2011-08-18 46 views
0

將對象添加到NSMutableArray裏有了這個代碼,我得到這個錯誤:從的UITextField

'* -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'

categories=[[NSMutableArray alloc] init ]; 
UIAlertView* dialog = [[UIAlertView alloc] init]; 
    [dialog setDelegate:self]; 
    [dialog setTitle:@"Category name"]; 
    [dialog setMessage:@" "]; 
    [dialog addButtonWithTitle:@"Cancel"]; 
    [dialog addButtonWithTitle:@"OK"]; 

    nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)]; 
    [nameField setBackgroundColor:[UIColor whiteColor]]; 
    [dialog addSubview:nameField]; 

    [dialog show]; 
    [dialog release]; 

    [categories addObject:[nameField text]]; 

    [nameField release]; 
    [categoryTable reloadData]; 

當我在模擬器中運行這個,我得到一個崩潰前的警報視圖甚至彈出。有任何想法嗎?

回答

1

如果您嘗試添加零對象,則會在NSArray中引發異常。檢查條件第一:

if ([nameField text]) [categories addObject:[nameField text]]; 

編輯:

從您的代碼

此外,您還需要實現UIAlertViewDelegate協議,並嘗試將對象添加到您的陣中還有。例如:

- (void) showDialog { 
    UIAlertView* dialog = [[UIAlertView alloc] init]; 
    [dialog setDelegate:self]; 
    [dialog setTitle:@"Category name"]; 
    [dialog setMessage:@" "]; 
    [dialog addButtonWithTitle:@"Cancel"]; 
    [dialog addButtonWithTitle:@"OK"]; 

    nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)]; 
    [nameField setBackgroundColor:[UIColor whiteColor]]; 
    [dialog addSubview:nameField]; 

    [dialog show]; 
    [dialog release]; 
} 


- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 

    if ([nameField text]) [categories addObject:[nameField text]]; 
    [categoryTable reloadData]; 

} 

假設nameField和categories是iVars,您將需要在不再需要時釋放它們。您還應該檢查委託方法中按下了哪個按鈕。 HTH戴夫

+0

嗯好吧,這似乎已經解決了這個問題,但是當我插入時我的表中沒有顯示出來。使用此代碼:'if([nameField text])[類別insertObject:[nameField text] atIndex:[categories count]];',我的表中沒有任何內容出現。但是,如果我使用'[類別insertObject:@「test」atIndex:[categories count]];',那麼「test」確實出現在我的表中。什麼可能導致這種情況? – Snowman

+0

您需要創建您的UIAlertView,然後顯示它,而不是其他任何東西。方法中的其餘代碼將繼續運行[dialog show]調用(即,無對象被傳遞給數組)。一旦你觸摸了一個按鈕,相應的委託方法就會被調用。在那裏你應該嘗試做一些結果。 –

+0

我該怎麼做? – Snowman