【问题标题】:How do you create an NSValue wrapping a UIOffset struct?如何创建包装 UIOffset 结构的 NSValue?
【发布时间】:2012-03-30 21:29:25
【问题描述】:

我正在尝试更改 UISegmentedControl 的文本阴影位置。为此,documentation 说我需要传入一个包装 UIOffset 结构的NSValue

UITextAttributeTextShadowOffset
    Key to the offset used for the text shadow in a text attributes dictionary.
    The corresponding value is an instance of NSValue wrapping a UIOffset struct.
    Available in iOS 5.0 and later.
    Declared in UIStringDrawing.h.

问题是NSValue 没有这样的 UIOffset 结构的包装方法 - 只需搜索文档即可。我看到很多sample code 使用这个不存在的功能。

[NSValue valueWithUIOffset:UIOffsetMake(0, 1)]

当我尝试运行它时它崩溃了。我不明白有多少示例代码可以运行它。

【问题讨论】:

    标签: ios cocoa-touch


    【解决方案1】:

    查看NSValue UIKit Additions,这是一个类别,除了其他有用的东西之外,它还添加了您所追求的-[NSValue valueWithUIOffset:] 方法。

    【讨论】:

      【解决方案2】:

      它可能不在文档中,但它存在并且有效:

      NSValue *uiOffsetValue = [NSValue valueWithUIOffset:UIOffsetMake(0, 1)];
      NSLog(@"%@", uiOffsetValue);
      // outputs "UIOffset: {0, 1}"
      

      你是什么意思,当你尝试运行它时它崩溃了?如果该方法不存在,那么它甚至不应该编译。如果您的应用程序编译但崩溃,则问题一定是其他原因。

      【讨论】:

      • Xcode 只警告不要将未知消息传递给对象。当将未知消息传递给对象时,Objective-C 将在运行时崩溃。
      • 真的吗?我有一个 vanilla Xcode 设置,如果我尝试使用未知方法,我会得到“选择器 'foo:' 的无已知类方法”,它甚至无法编译。
      • 其实经过进一步测试。它只在我的 iOS 4 设备上崩溃。它适用于我的 iOS 5 设备。这是可以理解的,因为设置阴影位置仅在 5 上支持。但是关于为什么 valueWithUIOffset 不在文档中仍然是一个未解之谜。
      • 它在文档中 - 请参见此处:developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/… 它还显示“在 iOS 5.0 及更高版本中可用”,这解释了它为什么会在您的 iOS 4 设备上崩溃。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 2013-08-11
      相关资源
      最近更新 更多