2

我有财产:

@property(nonatomic, strong) IBOutletCollection(UIView) NSMutableArray *allOpposition;

它在 IB 中连接到一堆子视图并合成。后来我有:

- (void)willRemoveSubview:(UIView *)subview
{
  [[self allOpposition] removeObject:subview]; // Crash occurs here.
  [super willRemoveSubview:subview];
}

当需要删除表示对立实体的视图时,我收到以下错误消息:

-[__NSArrayI removeObject:]: unrecognized selector sent to instance 0x88211c0

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

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

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

4

1 回答 1

4

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

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

-(void)setAllOpposition:(NSMutableArray*)allOpposition
{
    _allOpposition = [allOpposition mutableCopy];
}

您也可以通过将属性声明从 更改为 来实现这一点strongcopy但这是一个猜测。

于 2012-09-25T06:39:41.023 回答