Cocoa:未调用来自自定义视图代理的 initWithFrame
Cocoa: initWithFrame from a custom view proxy is not being called
根据 apple 的文档 Creating a Custom View 如果您在 Interface Builder 中使用自定义视图代理,则应调用此方法。
如果您还没有为自定义视图创建 Interface Builder 调色板,可以使用两种技术在 Interface Builder 中创建子类的实例。第一个是使用 Interface Builder 容器面板中的 Custom View 代理项。此视图是自定义视图的替代,允许您相对于其他视图定位和调整视图大小。然后,您使用检查器指定视图表示的 NSView 的子类。当应用程序加载 nib 文件时,自定义视图代理会创建指定视图子类的新实例,并使用 initWithFrame: 方法对其进行初始化,并根据需要传递任何自动调整大小的标志。视图实例随后收到一条 awakeFromNib 消息。
不幸的是,在我的案例中没有调用它。有人必须处理这个问题吗?
在部署到 OS 的最新版本时,Xcode 的最新版本中有新行为。在 NIB 的文件检查器中,查看是否选中了 Runtime Behavior - Instantiation: Prefer coder。如果是,如果您 need/want -initWithFrame:
调用了您的自定义视图,请取消选中它。或者,保持选中状态并利用 NIB 加载机制现在将调用 -initWithCoder:
的事实。当然,您应该通过编码和解码任何对序列化有意义的自定义内部状态来确保您的 class 属性 支持 NSCoding
。
根据 apple 的文档 Creating a Custom View 如果您在 Interface Builder 中使用自定义视图代理,则应调用此方法。
如果您还没有为自定义视图创建 Interface Builder 调色板,可以使用两种技术在 Interface Builder 中创建子类的实例。第一个是使用 Interface Builder 容器面板中的 Custom View 代理项。此视图是自定义视图的替代,允许您相对于其他视图定位和调整视图大小。然后,您使用检查器指定视图表示的 NSView 的子类。当应用程序加载 nib 文件时,自定义视图代理会创建指定视图子类的新实例,并使用 initWithFrame: 方法对其进行初始化,并根据需要传递任何自动调整大小的标志。视图实例随后收到一条 awakeFromNib 消息。
不幸的是,在我的案例中没有调用它。有人必须处理这个问题吗?
在部署到 OS 的最新版本时,Xcode 的最新版本中有新行为。在 NIB 的文件检查器中,查看是否选中了 Runtime Behavior - Instantiation: Prefer coder。如果是,如果您 need/want -initWithFrame:
调用了您的自定义视图,请取消选中它。或者,保持选中状态并利用 NIB 加载机制现在将调用 -initWithCoder:
的事实。当然,您应该通过编码和解码任何对序列化有意义的自定义内部状态来确保您的 class 属性 支持 NSCoding
。