• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

objective-c - iOS 和可变 IBOutletCollections

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:48:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有属性(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)。为什么不直接接受不可变数组?



Best Answer-推荐答案


您可能已将该属性声明为可变数组,但我很确定当您的 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap