dismissModalViewControllerAnimated崩溃的应用程序

时间:2010-12-18 10:50:24

标签: iphone

我是iPhone开发的新手,所以请原谅我的无知。

我从UIViewController调用UIViewController。第一个UIViewController是一个项目列表,第二个是每个项目的详细信息。

ListViewController(第一个UIViewController):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // initialize a AddViewController
    selItem = indexPath.row;
    selIndexPath = indexPath;
    AddViewController *controller = [[AddViewController alloc] init];
    // give controller the data to display

    // show the AddViewController
    [controller setData:[list objectAtIndex:indexPath.row]];
    controller.delegate = self;
    [self presentModalViewController:controller animated:YES];
    [controller release]; // release the controller AddViewController
} // end method tableView:didSelectRowAtIndexPath:

在'AddViewController'中,我有一个段控件作为左右按钮栏。在左边,我有'退出'和'删除'。在右边我有'添加'和'保存'。细分控制链接的出口是:

AddViewController(第二个UIViewController):

- (IBAction)delExitSegment:sender
{
    // The segmented control was clicked, handle it here 
    UISegmentedControl *segmentedControl = (UISegmentedControl *)sender;
    switch (segmentedControl.selectedSegmentIndex) {
        case 0:     // Exit Button
            [delegate addViewControllerDidExit:self];
            break;

        case 1:     // Delete Button
            [delegate addViewControllerDelItem:self];
            break;

    }

}

- (IBAction)segmentAction:sender
{
    // The segmented control was clicked, handle it here 
    UISegmentedControl *segCtl = (UISegmentedControl *)sender;
    switch (segCtl.selectedSegmentIndex) {
        case 0:     // Add Button
            if (currentCell != nil)
                [data setValue:currentCell.textField.text forKey:currentCell.label.text];

            [delegate addViewControllerDidFinishAdding:self];
            break;

        case 1:     // Save Button
            [delegate addViewControllerUpdate:self];
            break;

    }
}

当我回到第一个视图控制器时,我有: ListViewController:

- (void)addViewControllerDidFinishAdding:(AddViewController *)controller
{
    NSDictionary *item = [controller values];
    if (item != nil)
    {
        [list addObject:item];
    }
    [self dismissModalViewControllerAnimated:YES];
    [list writeToFile:itemFilePath atomically:NO];
    [self calcTotal];
    [self.tableView reloadData];
}

- (void)addViewControllerUpdate:(AddViewController *)controller
{
    NSDictionary *item = [controller values];
    if (item != nil)
    {
        [list replaceObjectAtIndex:selItem withObject:item];
    }
    [self dismissModalViewControllerAnimated:YES];
    [list writeToFile:itemFilePath atomically:NO];
    [self calcTotal];
    [self.tableView reloadData];
}

- (void)addViewControllerDidExit:(AddViewController *)controller
{
    [self dismissModalViewControllerAnimated:YES];
    [self.tableView reloadData];
}

- (void)addViewControllerDelItem:(AddViewController *)controller
{
    NSDictionary *item = [controller values];
    if (item != nil)
    {
        [list removeObjectAtIndex:selItem];
                [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:selIndexPath] withRowAnimation:UITableViewRowAnimationFade];
        [list writeToFile:itemFilePath atomically:NO];
    }
    [self dismissModalViewControllerAnimated:YES];
    [self.tableView reloadData];
}

如果我从AddViewController退出或删除项目,我没有问题。当我尝试添加或保存时,我的应用程序将崩溃。调试器在dismissModalViewControllerAnimated崩溃。我看不出两个段控件之间有什么不同。 我有什么想法可能有错吗?

我刚刚发现当我尝试编辑单元格时左右按钮都不起作用。 AddViewController中的编辑单元格如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"EditableCell";

    EditableCell *cell = (EditableCell *)[table dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil)
    {
        cell = [[EditableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }

    NSString *key = [fields objectAtIndex:indexPath.row + indexPath.section * 3];
    [cell setLabelText:key];

    cell.textField.text = [data valueForKey:key];

    if (indexPath.section == 0 && (indexPath.row == 1 || indexPath.row == 3))
        cell.textField.keyboardType = UIKeyboardTypeNumberPad;
    if (indexPath.section == 1)
        cell.textField.keyboardType = UIKeyboardTypeNumberPad;

    cell.editing = NO;
    cell.delegate = self;

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;

}

1 个答案:

答案 0 :(得分:0)

这是问题

[self dismissModalViewControllerAnimated:YES];
[self.tableView reloadData];

当您关闭视图时,self的值变为未知,访问tableview肯定会崩溃。

如果你想刷新tableView,只需使用[self.tableView reloadData]不要忽略视图。