我有属性(property):
@property(nonatomic, strong) IBOutletCollection(UIView) NSMutableArray *allOpposition;
在 IB 中连接到一堆 subview 并合成。后来我有:
- (void)willRemoveSubviewUIView *)subview
{
[[self allOpposition] removeObject:subview]; // Crash occurs here.
[super willRemoveSubview:subview];
}
当需要删除代表相反实体的 View 时,我收到以下错误消息:
-[__NSArrayI removeObject:]: 无法识别的选择器发送到实例 0x88211c0
对象不是 nil
并且包含在集合中。为什么我的数组是不可变的?
备注:在这种情况下,Apple 很可能要求集合中的每个对象都是 UIView
类型。如果数组是完全可变的,我可以添加外来类型。我在这里没有找到太多文档,所以这是我的猜测。
备注:如果返回的数组最终是不可变的,我看不到允许传入可变数组的值(value)。为什么不直接接受不可变数组?
您可能已将该属性声明为可变数组,但我很确定当您的 nib 被加载时,将为其分配一个不可变数组。
覆盖 allOpposition
的合成 setter (我假设您使用的是 xcode4.4 或更高版本以及 ARC):
-(void)setAllOppositionNSMutableArray*)allOpposition
{
_allOpposition = [allOpposition mutableCopy];
}
您也可以通过将属性声明从 strong
更改为 copy
来实现此目的,但这是猜测。
关于objective-c - iOS 和可变 IBOutletCollections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576780/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) | Powered by Discuz! X3.4 |