iOS和可变IBOutletCollections(iOS and mutable IBOutlet

2019-07-31 21:28发布

我有属性:

@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 ,在这种情况下。 如果数组是完全可以想象的可变我可以添加外类型。 我还没有发现太多的文件在这里,所以这是我的一部分投机。

备注:我没有看到传递在允许可变数组的值,如果返回的数组是最终不可改变的。 为什么不接受不可改变的阵列?

Answer 1:

你可能已经声明过的属性作为一个可变的数组,但我敢肯定,当你的笔尖被载入不可改变的阵列将被分配给它。

覆盖了合成二传手allOpposition (我假设你正在使用xcode4.4或更高版本以及ARC):

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

您可能还能够通过改变从财产申报,以实现这一strongcopy ,但是这是一个猜测。



文章来源: iOS and mutable IBOutletCollections