以下代码在模拟器中运行良好,但在创建存档文件时抛出“command failed du to signal:segmentation fault:11”。

func popAction() {
  MyViewController.pop(self)
}

class func pop<T where T : MyActionDelegate, T : UIViewController>(controller: T) {
   let bundle = NSBundle(forClass: controller.dynamicType)
   // …
}

下面的汇编很好:
let bundle = NSBundle(forClass: object_getClass(self))
// or
let bundle = NSBundle(forClass: self)

dynamictype的类型组合(协议和类)似乎有问题。
我认为这在调试模式下而不是发布模式下工作的原因在于编译期间执行的优化。
有谁能告诉我为什么它在一种情况下有效而在另一种情况下无效?
谢谢

最佳答案

即使启用了优化,这也对我有效:

func popAction() {
    MyViewController.pop(self)
}

class func pop<T where T : MyActionDelegate, T : UIViewController>(controller: T) {
    let bundle = NSBundle(forClass: (controller as UIViewController).dynamicType)
    // …
}

关于class - 带有NSBundle的Segfault 11(forClass :)和多种类型约束(协议(protocol)+类),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30304774/

10-10 22:32