在Watch InterfaceController.swift中获取MMWormhole的未解析标识符

时间:2015-06-14 10:35:05

标签: ios swift apple-watch bridge mmwormhole

我的Apple Watch项目是在Swift中。我用CocoaPods来安装MMWormhole, 我创建了桥接标题,如以下链接所述:

http://bencoding.com/2015/04/15/adding-a-swift-bridge-header-manually/

How to call Objective-C code from Swift

当我创建桥接头时,我将其定位到我的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应用程序上定位。但仍然......不起作用。

我也制作pod'MMWormhole','〜> 1.2.0'在WatchExtension的podfile目标中。但仍未在Watch interfaceController中识别MMWormhole

我错过了什么吗?

这是我的项目:https://www.dropbox.com/s/tsajeoopnghyl1g/MyTestCocoData.zip?dl=0

1 个答案:

答案 0 :(得分:2)

这是我的答案。经过几天的努力和代码导师的帮助:

问题是:

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&添加应用程序组观看Ext
  • 添加目标C
  • 目标两者
  • 构建设置:在iOS和&amp ;;的相对路径中设置* .h观看Ext。设置* .h相对路径。例如 ../ MMWormholeTest / MMWormholeTest / MMWormholeTest-桥接-Header.h
  • 添加标题搜索路径:$ {PRODS_ROOT} /标题,递归IOS 7 Watch Ext

<强> MMWormhole

  • Cocoa pods it。
  • 设置pod'MMWormhole','〜&gt; 1.2.0'iOS和iOS的目标在Podfile中观看Ext
  • 在桥接头文件中设置#import“MMWormhole.h”。
  • 在ViewController和&amp; InterfaceOController,将虫洞设置为类范围变量。例如var wormhole:MMWormhole!
  • 在ViewDidLoad和awakeWithContext中实例化MMWormhole 在WatchExt中,在awakeWithContext中设置监听器,并因封闭而使用self.lable.setText。例如self.label.setText(messageObject!as!String)
  • 无需注册接收器,如堆栈溢出中的其他一些MMWormhole示例所示。