与尝试使用 .xib 创建 iOS 扩展的许多问题不同,我尝试做与使用 StoryBoard 创建 macOS 扩展完全相反的事情。当 Xcode 为我的 macOS 项目创建应用程序扩展目标时,它只有一个 .xib 和 .xib 中 ViewController 的 NSExtensionPrincipalClass
所以我创建了一个“新建”->"file"->“ Storyboard”,并添加了 NSExtensionMainStoryboard到 plist 和没有扩展名的 StoryBoard 名称,我收到模糊的 Widget Simulator 错误:
"TodayExt[76374:5145083] Failed to load extension view controller"
我已经确认:StoryBoard 名称、StoryBoard 自定义类、StoryBoard 的目标成员身份、NSExtensionMainStoryboard 直接位于 NSExtension 下方。
来 self 的列表:
<dict>
<key>NSExtensionMainStoryboard</key>
<string>TodayStoryboard</string>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionPointVersion</key>
<string>2.0</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.widget-extension</string>
<key>com.apple.notificationcenter.widget.description</key>
<string>TodayExt</string>
</dict>
最佳答案
这不是答案,而是一种解决方法。 The answer on Apple Dev forums说“你总是可以定义一个自定义 Storyboard并使用一些粘合代码将其嵌入到你的 Root View Controller 中。”
对于那些想知道“一点粘合代码”是什么的人,在 *ExtensionController 中,您可以添加如下内容:
override func viewDidLoad() {
super.viewDidLoad()
let myStoryboard = NSStoryboard.init(name: NSStoryboard.Name("MyStoryboard"), bundle: Bundle.main)
let myStoryboardVC = myStoryboard.instantiateInitialController() as! MyStoryboardViewController
self.view.autoresizesSubviews = true
self.view.addSubview(myStoryboardVC.view)
self.insertChildViewController(myStoryboardVC, at: 0)
我仍然很想知道不用胶水做到这一点的正确方法。
关于xcode - macOS NSExtensionMainStoryboard 无法加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740076/