菜鸟教程小白 发表于 2022-12-12 22:48:58

objective-c - iOS 和可变 IBOutletCollections


                                            <p><p>我有属性(property):</p>

<pre><code>@property(nonatomic, strong) IBOutletCollection(UIView) NSMutableArray *allOpposition;
</code></pre>

<p>在 IB 中连接到一堆 subview 并合成。后来我有:</p>

<pre><code>- (void)willRemoveSubview:(UIView *)subview
{
[ removeObject:subview]; // Crash occurs here.
;
}
</code></pre>

<p>当需要删除代表相反实体的 View 时,我收到以下错误消息:</p>

<p><code>-: 无法识别的选择器发送到实例 0x88211c0</code></p>

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

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

<p>备注:如果返回的数组最终是不可变的,我看不到允许传入可变数组的值(value)。为什么不直接接受不可变数组?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可能已将该属性声明为可变数组,但我很确定当您的 nib 被加载时,将为其分配一个不可变数组。 </p>

<p>覆盖 <code>allOpposition</code> 的合成 setter (我假设您使用的是 xcode4.4 或更高版本以及 ARC):</p>

<pre><code>-(void)setAllOpposition:(NSMutableArray*)allOpposition
{
    _allOpposition = ;
}
</code></pre>

<p>您也可以通过将属性声明从 <code>strong</code> 更改为 <code>copy</code> 来实现此目的,但这是猜测。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - iOS 和可变 IBOutletCollections,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12576780/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12576780/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - iOS 和可变 IBOutletCollections