具有“iboutlet”属性的属性必须是对象类型(无效的“BOOL”(又名“签名字符”))

Posted

技术标签:

【中文标题】具有“iboutlet”属性的属性必须是对象类型(无效的“BOOL”(又名“签名字符”))【英文标题】:Property with 'iboutlet' attribute must be an object type (invalid 'BOOL' (aka 'signed char')) 【发布时间】:2012-06-24 09:08:50 【问题描述】:

将我的项目更新到 10.7 SDK 并切换调试器后, 我收到了这条消息:

Property with 'iboutlet' attribute must be an object type (invalid 'BOOL' (aka 'signed char'))

在更新之前它运行良好。 有关如何解决此问题的任何提示?

【问题讨论】:

【参考方案1】:

你必须导入地图框架(MapKit/MapKit.h)

#import <MapKit/MapKit.h>

【讨论】:

【参考方案2】:

如果您为组件使用自定义类(即从 UI* 子类化),请记住您需要为您的类导入 .h 文件,这样您的属性指针就不仅仅是编译器的 (id)。

【讨论】:

你说得对,我正在使用#import "BOValidationTextField.h"。我已经在课堂上导入了这个 .h 文件。【参考方案3】:

尝试取消链接并再次链接 IBOutlet,或尝试将 boolValue 分配给持有该对象的变量。

据我所知,使用新的 SDK,许多东西都已被弃用,并且无法正常工作。这就是为什么我讨厌使用测试版!

【讨论】:

【参考方案4】:

IBOutlets 总是对象,它们是在 xibs/nibs 中引用的值,你不能用标量值真正做到这一点。如果您需要设置布尔值,那么您可以在对象的 -awakeFromNib 方法中调用 setter,或者根据您正在执行的操作:kvo 或委托可能是合适的。

【讨论】:

以上是关于具有“iboutlet”属性的属性必须是对象类型(无效的“BOOL”(又名“签名字符”))的主要内容,如果未能解决你的问题,请参考以下文章

如何解决这个错误? “具有‘保留(或强)’属性的属性必须是对象类型”

类型提示。如何暗示传递给函数的对象必须具有某种方法/属性访问权限?

Javascript 在原型中设置具有值类型的对象属性? [关闭]

是否可以在不声明 IBOutlet 属性的情况下访问 IB 对象(例如 UILabel)?

强 vs 弱 - 如何定义可能连接或不连接到 IBOutlet 的属性?

如何序列化具有填充数组的对象类型属性的类