我正在尝试创建动态顶级菜单。 我必须从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对象
答案 0 :(得分:1)
好的,根据您的评论
但我想在loadData完成之前调用menu方法
问题在于:
_menu = [[DOPNavbarMenu alloc] initWithItems:@[strArray] width:self.view.dop_width maximumNumberInRow:_numberOfItemsInRow];
在loadData
运行之前,我认为strArray
是nil
。这会导致此部分@[strArray]
失败 - 这会创建一个新的数组,其strArray
作为唯一元素,不能是nil
。
我还假设您希望在那里传递strArray
,而不是将其包装在另一个数组中。
现在,如果您在menu
中填充strArray
之前致电loadData
,菜单中可能不会有任何项目,除非您有办法在新项目后更新它loadData
完成。
总结:要解决您的直接问题,您应该将以上行更改为:
_menu = [[DOPNavbarMenu alloc] initWithItems:strArray width:self.view.dop_width maximumNumberInRow:_numberOfItemsInRow];
应该有效,但由于上述原因,菜单中不存在任何项目。