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

Posted

技术标签:

【中文标题】尝试在objective-c中从objects[0]插入nil对象【英文标题】:attempt to insert nil object from objects[0] in objective-c 【发布时间】:2015-12-10 12:49:42 【问题描述】:

我正在尝试创建一个动态顶部菜单。 我必须从 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:]: 尝试从 objects[0] 插入 nil 对象”

【问题讨论】:

请将您的代码放入代码标签中(4个空格缩进) @AminNegm-Awad 感谢您的回复。但我不能得到你.. user3201089 或 Surya,请阅读 SO 文档。代码引用应格式化为代码。 你确定menu方法在loadData完成后被调用吗? @Avi 请指导我..如何将数组值添加到菜单???? 【参考方案1】:

好的,根据您的评论

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

问题出在这里:

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

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

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

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

总结一下:要解决您当前的问题,您应该将上面的行更改为:

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

应该可以,但由于上述原因,菜单中不会出现任何项目。

【讨论】:

感谢您的回复.. 但我的值为零。随机选择是:(null) 是的,就像我说的 - 在您的代码中,您在 loadData 中创建 strArray。如果在loadData 之前调用menu 方法,那么strArray 必然是nil。理想情况下,您应该创建菜单,从网络加载数据,然后刷新菜单。 我的问题修复。但菜单中没有项目 @VijaySanghavi - 问题中有一个指向 github 页面的链接,不需要弄乱它。 @user3201089 - 同样,这是因为 strArray 在创建菜单后被创建和填充。

以上是关于尝试在objective-c中从objects[0]插入nil对象的主要内容,如果未能解决你的问题,请参考以下文章

在objective-c中从“JSON-style” NSString中获取正确的值

无法在 Xcode 控制台中从 Objective-C 记录 Swift Singletons

在 Objective-C 中从字符串中删除空格

Objective-C Associated Objects 初识

如何在 Objective-C 中从 mysql 数据库中填充 NSArray?

如何在 iOS 7 的 UIWebView 中从 JavaScript 调用 Objective-C?