尝试从objective-c中的对象[0]插入nil对象

时间:2015-12-10 12:49:42

标签: ios objective-c

我正在尝试创建动态顶级菜单。 我必须从json请求中获取一些数据,并在顶部菜单的一个部分中显示这些数据。我是Objective-C的新手。我也试过NSMutableArrays,我有一个错误。只有一个MutableArray和我可以显示顶部菜单。我正在关注顶级菜单“https://github.com/dopcn/DOPNavbarMenu”的第三方框架。

- (DOPNavbarMenu *)menu {
    if (_menu == nil) {
        [strArray objectAtIndex:0];

        NSLog(@"Random Selection is:%@",strArray);

        _menu = [[DOPNavbarMenu alloc] initWithItems:@[strArray]  width:self.view.dop_width maximumNumberInRow:_numberOfItemsInRow];
        _menu.backgroundColor = [UIColor blackColor];
        _menu.separatarColor = [UIColor whiteColor];
        _menu.delegate = self;
    }

    return _menu;
}

-(void)loadData
{
    strResponse=[dictionary objectForKey:@"data"];

    strMsg=[strResponse valueForKey:@"Text"];

    NSLog(@“string message  is :%@",strMsg);
    NSLog(@"String Response is :%@",strResponse);
    NSLog(@"Text Response is: %@",strMsg);

    strArray =  [[NSMutableArray alloc] init];

    [strArray addObject:strMsg];

    NSLog(@"Array values are - %@", strArray);
}

数组值包括:生活方式,护理计划,追踪器/日记,问卷/评估。

但是我有这样的例外:

  

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [__ NSPlaceholderArray initWithObjects:count:]:尝试从对象[0]中插入nil对象

1 个答案:

答案 0 :(得分:1)

好的,根据您的评论

  

但我想在loadData完成之前调用menu方法

问题在于:

_menu = [[DOPNavbarMenu alloc] initWithItems:@[strArray] width:self.view.dop_width maximumNumberInRow:_numberOfItemsInRow];

loadData运行之前,我认为strArraynil。这会导致此部分@[strArray]失败 - 这会创建一个新的数组,其strArray作为唯一元素,不能是nil

我还假设您希望在那里传递strArray,而不是将其包装在另一个数组中。

现在,如果您在menu中填充strArray之前致电loadData,菜单中可能不会有任何项目,除非您有办法在新项目后更新它loadData完成。

总结:要解决您的直接问题,您应该将以上行更改为:

_menu = [[DOPNavbarMenu alloc] initWithItems:strArray width:self.view.dop_width maximumNumberInRow:_numberOfItemsInRow];

应该有效,但由于上述原因,菜单中不存在任何项目。