objective-c – 为什么我不能将nil对象添加到NSMutableArrays?

objective-c – 为什么我不能将nil对象添加到NSMutableArrays?,第1张

概述我有一种情况,我希望能够维护一个可能都指向nil的指针数组. Equipment *equipment[19]; 但是,我发现我不能将指针数组或双指针设置为对象的属性. 当我不能使用C风格的数组时,我的解决方法是使用NSArray对象.所以我尝试做类似以下的事情: NSMutableArray *equipment = [NSMutableArray arrayWithCapacity: NUM_ 我有一种情况,我希望能够维护一个可能都指向nil的指针数组.
Equipment *equipment[19];

但是,我发现我不能将指针数组或双指针设置为对象的属性.

当我不能使用C风格的数组时,我的解决方法是使用NSArray对象.所以我尝试做类似以下的事情:

NSMutableArray *equipment = [NSMutableArray arrayWithCapacity: NUM_EQUIPSLOTS];for (int i=0; i<NUM_EQUIPSLOTS; i++) {    [equipment setobject: nil atIndexedSubscript: i];}

这里的想法是我有一个空指针数组,稍后会指向东西.

*** Terminating app due to uncaught exception 'NSinvalidargumentexception',reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'*** First throw call stack:(0x246e012 0x1e4be7e 0x2421b6a 0x2421a20 0xebd02 0xde82b 0xc9d5a 0xcb6bd 0x4d525 0xc94fa 0xc8b6a 0xa18157 0xa18747 0xa1994b 0xa2acb5 0xa2bbeb 0xa1d698 0x3176df9 0x3176ad0 0x23e3bf5 0x23e3962 0x2414bb6 0x2413f44 0x2413e1b 0xa1917a 0xa1affc 0xc8526 0x1fa5)libc++abi.dylib: terminate called throwing an exception

我知道我可以使用C风格的数组和单个对象轻松地完成这项工作.我宁愿这样做而不是像哑巴一样:

Equipment *equipment0 = nil;Equipment *equipment1 = nil;Equipment *equipment2 = nil;// ...Equipment *equipment18 = nil;

这可能与NSArray模型本身的结构有关.有人会向我解释为什么会这样,为什么我不能简单地在NSArray中添加或设置nil对象?先感谢您.

解决方法 “为什么”既微不足道也不令人满意.这是因为NSMutableArray包含对象,而nil不是对象. ObjC在对象和原始类型之间有很强的区别. nil是一种原始类型.如CodaFi所述,您可以使用NSNull或NSPointerarray来解决这些问题.典型的解决方案是NSNull. 总结

以上是内存溢出为你收集整理的objective-c – 为什么我不能将nil对象添加到NSMutableArrays?全部内容,希望文章能够帮你解决objective-c – 为什么我不能将nil对象添加到NSMutableArrays?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234732.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存