在Watch InterfaceController.swift中获取MMWormhole的未解析标识符
我的Apple Watch项目是在Swift中。 我使用CocoaPods来安装MMWormhole,我创建了这些链接中描述的桥接头:
Adding a Swift Bridge Header manually
如何从Swift调用Objective-C代码
当我创建桥接头时,我将其定位到我的iphone应用程序,并且还可以观看Extension。
桥接header.h,我有这个:
#import "MMWormhole.h"
在我的iPhone应用程序View Controller中,我有:
import UIKit import Foundation let wormhole = MMWormhole(applicationGroupIdentifier: "group.cocoShareData", optionalDirectory: "wormhole")
而且没有抱怨。
但是,在我的手表界面控制器中,我有这个:
import WatchKit import Foundation ... override func willActivate() { // This method is called when watch view controller is about to be visible to user super.willActivate() let wormhole = MMWormhole(applicationGroupIdentifier: "group.cocoShareData", optionalDirectory: "wormhole") }
它抱怨“使用未解析的标识符MMWormhole”。
我甚至尝试使用#import“MMWormholeClient.h”,但没有什么可以解决这个问题。
我也尝试创建桥接头,只是在iPhone应用程序上的目标。 但仍然……不起作用。
我还在WatchExtension的podfile目标中制作pod’MMWormhole’,’〜> 1.2.0’。 但仍未在Watch interfaceController中识别出MMWormhole
我错过了什么吗?
这是我的项目: https : //www.dropbox.com/s/tsajeoopnghyl1g/MyTestCocoData.zip?dl = 0
这是我的答案。 经过几天的努力和代码导师的帮助:
问题是:
1) The Objective-C bridge has to set the correct path and header search path so both IOS & WatchExt can use 2) The PodFile in MMWormhole must target for both iOS & WatchExt. 3) The code in MMWormhole npm page is not correct. Move the instantiation of MMWormhole out and be a class Variable.
以下是一步一步的简要说明:
Objective C Bridge
- 为iPhone App和Watch Ext添加应用程序组
- 添加目标C.
- 以两者为目标
- 构建设置:在iOS和Watch Ext的相对路径中设置* .h。 设置* .h相对路径。 例如../MMWormholeTest/MMWormholeTest/MMWormholeTest-Bridging-Header.h
- 添加标题搜索路径:$ {PRODS_ROOT} /标题,递归IOS 7 Watch Ext
MMWormhole
- cocoa豆荚吧。
- 在Podfile中为iOS和Watch Ext设置pod’MMWormhole’,’〜> 1.2.0’目标
- 在桥接头文件中设置#import“MMWormhole.h”。
- 在ViewController和InterfaceOController中,将wormhole设置为类范围变量。 例如var虫洞:MMWormhole!
- 在ViewDidLoad中实例化MMWormhole,在WatchExt中实现awakeWithContext,在awakeWithContext中设置监听器,并因封闭而使用self.lable.setText。 例如self.label.setText(messageObject!as!String)
- 无需注册接收器,如堆栈溢出中的其他一些MMWormhole示例所示。