viewDidLoad中的EXC_BAD_ACCESS

时间:2012-02-14 14:42:51

标签: objective-c cocoa exc-bad-access viewdidload super

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    @try {
        if ([segue.identifier isEqualToString:@"taskListSegue"])
        {   
            MindMapInformationViewController_iPhone *taskListContentController = [segue destinationViewController];  
            int selectedIndexPath = [[self.tableView indexPathForSelectedRow] row];

            MindMap *newMindMap;
            newMindMap = [mindmaps objectAtIndex:selectedIndexPath];        
            FileManager *fileManager = [[[FileManager alloc] init] autorelease];
            [fileManager readFile:newMindMap.pathToMindmapAtDevice parsing:YES];

            NSMutableArray *taskArray = [fileManager getArray];
            [taskListContentController setTasksOfSelectedMindmap:taskArray];
        }
    }
    @catch (NSException *exception) {

    }
}

-(void)setTasksOfSelectedMindmap:(NSMutableArray *)tasks {
    @try {
        [self initComponents];
        if (tasks != nil) {
            taskArray = tasks;
        }
    }
    @catch (NSException *exception) {

    }

}

-(void)initComponents {
    @try {
        taskArray = [[NSMutableArray  alloc] init];

        taskName = [[NSMutableArray alloc] init];
        taskOwner = [[NSMutableArray alloc] init];
    }
    @catch (NSException *exception) {

    }
}

-(void)viewDidLoad
{
    @try {
        [super viewDidLoad];
        int i = 0;
        for (MindMapTask *newTask in taskArray) {
            if (newTask.taskOwner == nil) {
                newTask.taskOwner = @"Keine Angabe";
            }
            [taskName addObject:newTask.taskTitle];
            [taskOwner addObject:newTask.taskOwner];

            i++;
        }

    }
    @catch (NSException *exception) {
        NSLog(@"Exception - %@", exception);
    }
}

为什么我得到EXC_BAD_ACCESS?此异常的生产者似乎是[super viewDidLoad]; ...

任何人都可以帮助我吗? :)

编辑:改变了一下代码..希望它可以理解

你可以看到,我将数组的定义移到了一个自己的方法中。我还添加了一个方法来确保taskTitle不是nil(在另一个类中)。

3 个答案:

答案 0 :(得分:4)

尝试放

[super viewDidLoad];

作为第一个声明。

答案 1 :(得分:1)

确保newTask.taskTitle不是NULL。

答案 2 :(得分:0)

taskArray仍然是一个有效的对象吗?它在哪里定义?它可能是自动释放的吗?

在函数开头添加断点时,所有对象都有效吗? (您可以在调试控制台中使用“po”检查,例如“po taskArray”)