gpt4 book ai didi

cocoa - 在 NSLayoutConstraint 上设置运行时属性

转载 作者:行者123 更新时间:2023-12-03 16:14:06 24 4
gpt4 key购买 nike

我想在界面构建器中为我的一些约束设置 identifier 属性。我之前在 IB 中使用过 NSView 实例中的用户定义的运行时属性表,并且没有遇到任何问题,但是我无法使用约束做完全相同的事情类。当我尝试访问代码中的标识符时,它只返回 null,而不是我在表的 Value 列中输入的字符串。我想这可能与 xib 加载机制有关,但我希望有人能够肯定地说出问题是什么。

IB --> 身份检查器 --> 用户定义的运行时属性:

  1. 关键路径:标识符
  2. 类型:字符串
  3. :TextViewWidthConstraint

稍后在 IBAction 方法中:

NSLog(@"%@", self.widthCon.identifier);

// --> (null)

最佳答案

NSLayoutConstraint 实现似乎存在一些基本错误。在 NSLayoutConstraint 上创建一个类别并覆盖一些用于调试目的的方法揭示了以下内容:

由于以下原因,Xcode 必须在编译时删除运行时属性:

  1. NSLayoutCategory 中被覆盖的 KVC 方法 setValue:forKey:setValue:forKeyPath:setValue:undefinedKey: 永远不会接到电话。

  2. 覆盖的方法 setIdentifier: 被调用,但从未从运行时属性部分接收传递的值

  3. 提供无效键不会像任何其他对象(例如 NSView)那样产生错误:

    2014-03-19 08:25:52.806 LayoutTestApp[13733:303] [ setValue:forUndefinedKey:]:此类与键 testKey 不兼容键值编码。

此外,在 NSLayoutConstraint 上设置自定义类也会被 Xcode 优雅地忽略(自定义类的 init 方法永远不会被调用)。看起来 Apple 禁用了 NSLayoutConstraints 的运行时属性和自定义类功能,或者这只是一个错误。无论哪种方式:通过运行时属性设置标识符很可能无法正常工作。

关于cocoa - 在 NSLayoutConstraint 上设置运行时属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com