Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 从KVO获取值-返回NSConreteValue_Swift_Key Value Observing - Fatal编程技术网

Swift 从KVO获取值-返回NSConreteValue

Swift 从KVO获取值-返回NSConreteValue,swift,key-value-observing,Swift,Key Value Observing,我有以下KVO观察员: override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { if context == &kvoContext { if (keyPath == "transform

我有以下KVO观察员:

 override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        if context == &kvoContext {
            if (keyPath == "transform") {
                if let transform = change![NSKeyValueChangeNewKey] {
                    print("transform: \(transform)")
                    overlay.transform = transform as! CGAffineTransform
                }
            }
        }
    }
但是,在我的变量窗口中,我将
transform
视为NSConcreteValue:

我在最后一行尝试设置覆盖时崩溃了。转换:

fatal error: unexpectedly found nil while unwrapping an Optional value

如何检索该值?

您的转换将自动装箱到
NSValue
对象中。您需要像这样访问它

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
  if context == &kvoContext {
    if (keyPath == "transform") {
      if let transform = change?[NSKeyValueChangeNewKey] as? NSValue {
        overlay.transform = transform.CGAffineTransformValue()
      }
    }
  }
}
重写函数observeValueForKeyPath(键路径:String?,对象的类型:AnyObject?,更改:[String:AnyObject]?,上下文:UnsafeMutablePointer){
如果上下文==&kvoContext{
如果(关键路径==“变换”){
如果让变换=将?[NSKeyValueChangeNewKey]更改为?NSValue{
overlay.transform=transform.cgaffinetTransformValue()
}
}
}
}

我现在得到了与
null
相同的崩溃和
转换
-您能确认您的完整代码与上面的一样吗。如果这仍然崩溃,您可以提供关于崩溃的更多信息以及如何注册和触发此KVO的示例。另外,作为旁注,您需要小心,因为状态
…UIKit框架通常不支持KVO…
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
  if context == &kvoContext {
    if (keyPath == "transform") {
      if let transform = change?[NSKeyValueChangeNewKey] as? NSValue {
        overlay.transform = transform.CGAffineTransformValue()
      }
    }
  }
}