当NSMutableArray在iOS中没有对象时,应用程序崩溃

时间:2014-03-05 10:45:33

标签: ios iphone nsmutablearray

我有四个文本字段,例如textfield1textfield2textfield3textfield4和一个按钮。当我点击按钮时,我将文本域文本添加到NSMutableArray并填入tableview

我的代码是:

- (void)buttonClick
{
    NSMutableArray  *array =[[NSMutableArray alloc]init];
    [array addObject: textfield1.text];
    [array addObject: textfield2.text];
    [array addObject: textfield3.text];
    [array addObject: textfield4.text];
 }

使用委托方法在表格视图中填充

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text =[array objectAtIndex:indexPath.row];
    return cell;
}

上面的代码工作正常。但是,当我单击按钮而不在文本字段中输入任何数据时,应用程序崩溃,因为数组为空。如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

您无法将nil添加到数组中。

[array addObject:textfield1.text ?: @""];
[array addObject:textfield2.text ?: @""];
[array addObject:textfield3.text ?: @""];
[array addObject:textfield4.text ?: @""];

这确保了数组中有四个项目(可能是空字符串)。

答案 1 :(得分:1)

为什么会崩溃?

您无法在数组中添加nil。它应该有内在的东西。

-(void)buttonClick
{
    NSMutableArray  *array =[[NSMutableArray alloc]init];

    if ([textfield1.text length]>0) {
        [array addObject: textfield1.text];

    }
    if ([textfield2.text length]>0) {
        [array addObject: textfield2.text];

    }
    if ([textfield3.text length]>0) {
        [array addObject: textfield3.text];
    }



}

答案 2 :(得分:0)

试试这个

-(void)buttonClick
{
    NSMutableArray  *array =[[NSMutableArray alloc]init];
     if(textfield1.text.length > 0)
        [array addObject: textfield1.text];

     if(textfield2.text.length > 0)
        [array addObject: textfield2.text];

     if(textfield3.text.length > 0)
        [array addObject: textfield3.text];

    if(textfield4.text.length > 0)
        [array addObject: textfield4.text];

 }

使用委托方法在表格视图中填充

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text =[array objectAtIndex:indexPath.row];
    return cell;
}

如果您有多个文本字段,那么:   //给出每个文本字段的标记值,从100到150或任何任何标记(我正在考虑50个文本字段)

for (int i=100; i<=150; i++) {
// self.view or use ur view on which u r addding textfield
    id txtF = [self.view viewWithTag:i]; 
    if([txtF isKindOfClass:[UITextField class]]) {
        UITextField *txtField = (UITextField*)txtF;
        if(txtField.text.length > 0) {
            //Add ur object
        }
    }
}

答案 3 :(得分:0)

你可以在放入一个数组之前检查文本字段是否有文本,如果是,则将其放入数组中。

答案 4 :(得分:0)

buttonClick方法中的这一行定义了一个本地数组变量:

NSMutableArray  *array =[[NSMutableArray alloc]init];

应该是

array =[[NSMutableArray alloc]init];

您的实例变量数组。