Objective c iOS和可变iOutletCollections

Objective c iOS和可变iOutletCollections,objective-c,ios,iboutletcollection,Objective C,Ios,Iboutletcollection,我有以下财产: @property(nonatomic, strong) IBOutletCollection(UIView) NSMutableArray *allOpposition; 在IB中连接到一系列子视图并进行合成。后来我有: - (void)willRemoveSubview:(UIView *)subview { [[self allOpposition] removeObject:subview]; // Crash occurs here. [super willR

我有以下财产:

@property(nonatomic, strong) IBOutletCollection(UIView) NSMutableArray *allOpposition;
在IB中连接到一系列子视图并进行合成。后来我有:

- (void)willRemoveSubview:(UIView *)subview
{
  [[self allOpposition] removeObject:subview]; // Crash occurs here.
  [super willRemoveSubview:subview];
}
当需要删除表示对立实体的视图时,我会收到以下错误消息:

-[\uuu NSArrayI removeObject:]:无法识别的选择器发送到实例0x88211c0

对象不是
nil
,包含在集合中。为什么我的数组是不可变的

备注:在本例中,Apple很可能要求集合中的每个对象的类型为
UIView
。如果数组是完全可变的,我可以添加外来类型。我在这里没有找到太多文档,所以这只是我的猜测


备注:如果返回的数组最终是不可变的,我看不到允许传入可变数组的价值。为什么不接受不可变数组呢?

您可能已经将该属性声明为可变数组,但我非常确定,当加载nib时,将为其分配一个不可变数组

覆盖
allOpposition
的综合设置器(我假设您使用的是xcode4.4或更高版本和ARC):


您也可以通过将属性声明从
strong
更改为
copy
来实现这一点,但这只是猜测

您可能已将该属性声明为可变数组,但我非常确定,当加载nib时,将为其分配一个不可变数组

覆盖
allOpposition
的综合设置器(我假设您使用的是xcode4.4或更高版本和ARC):


您也可以通过将属性声明从
strong
更改为
copy
来实现这一点,但这只是猜测

谢谢,它确实有效,可能是这里最好的选择。谢谢,它确实有效,可能是这里最好的选择。
-(void)setAllOpposition:(NSMutableArray*)allOpposition
{
    _allOpposition = [allOpposition mutableCopy];
}