Ios 如何将MMWormhole与Swift结合使用?

Ios 如何将MMWormhole与Swift结合使用?,ios,objective-c,swift,watchkit,mmwormhole,Ios,Objective C,Swift,Watchkit,Mmwormhole,我有一个iPhone应用程序,并添加了一个WatchKit扩展。从iPhone应用程序中,我想向WatchApp传递一个字符串,该应用程序将更改手表上的图像 我已经做的是下载源文件并导入MMWormhole.m&.h。它们是用Obj-C编写的,所以Xcode会自动为我桥接它们 我还添加了一个应用程序组,并为我的WatchExtension和我的iPhone目标激活了它 在关于它的教程中,我说我必须用以下方法初始化虫洞: self.wormhole = [[MMWormhole alloc]

我有一个iPhone应用程序,并添加了一个WatchKit扩展。从iPhone应用程序中,我想向WatchApp传递一个
字符串
,该应用程序将更改手表上的图像

  • 我已经做的是下载源文件并导入
    MMWormhole.m
    &
    .h
    。它们是用Obj-C编写的,所以Xcode会自动为我桥接它们
  • 我还添加了一个应用程序组,并为我的WatchExtension和我的iPhone目标激活了它
在关于它的教程中,我说我必须用以下方法初始化虫洞:

self.wormhole = [[MMWormhole alloc] initWithApplicationGroupIdentifier:@"group.com.mutualmobile.wormhole"
                                                                          optionalDirectory:@"wormhole"];
…并使用以下方式发送消息:

[self.wormhole passMessageObject:@{@"titleString" : title} 
                         identifier:@"messageIdentifier"];
但是我实际上不知道该把它放在哪里,我正在iPhone应用程序中使用Swift和Watch扩展


有人能帮我吗?

我想这取决于不同的应用程序,但对于一个应用程序,我将侦听器放在主iOS应用程序中我的应用程序委托的
方法中,使用选项完成启动。这是因为用户会使用手表,他们会将信息传送到手机上

有多个侦听器

var wormhole = MMWormhole(applicationGroupIdentifier: "group", optionalDirectory: nil)

wormhole.listenForMessageWithIdentifier("identifier", listener: { (message) -> Void in
                //do stuff
})

wormhole.listenForMessageWithIdentifier("identifier2", listener: { (message) -> Void in
            //do stuff
})

wormhole.listenForMessageWithIdentifier("identifier3", listener: { (message) -> Void in
            //do stuff
})
然后在一个
WKInterfaceController
中,我发送了一条消息。有时在动作中,有时在
中,将激活
方法。这实际上取决于你的应用程序的流量

var wormhole = MMWormhole(applicationGroupIdentifier: "group", optionalDirectory: nil)
    @IBAction func buttonPushed(){            
        wormhole.passMessageObject("object", identifier: "identifier1")
    }

这两种方式都可以,不过我可以很容易地在手表中放置一个监听器,等待手机上某个接口控制器发出的消息

这是我的指示。希望它们能帮助您使用最简单的用例,然后您可以从中进行扩展。(请记住构造代码,使其真正有意义!)

  • 将MMWormhole(即.h和.m)添加到项目中。如果您知道如何使用cocoapod,那么就这样做,否则,只需使用git子模块。(我使用git子模块)
  • 因为您需要.h从Swift可见,所以需要使用桥接头
  • 设置应用程序组,这需要使用开发者门户
  • 在iPhone构建目标->功能->应用程序组中,添加您的组。如果这三个复选框都不完美,请返回开发人员门户,确保一切正常,或者重新开始
mm虫洞,iPhone端

把虫洞放在你能到达的地方注意:您的组ID必须是上面的组ID

let wormhole = MMWormhole(applicationGroupIdentifier: "group.testMe.now", optionalDirectory: nil)
wormhole.listenForMessageWithIdentifier("wormholeMessageFromWatch", listener: { (message ) -> Void in
    if let messageFromWatch = message as? String {
          // do something with messageFromWatch
    }
})
let wormhole = MMWormhole(applicationGroupIdentifier: "group.testMe.now", optionalDirectory: nil)
wormhole.listenForMessageWithIdentifier("wormholeMessageFromPhone", listener: { (message ) -> Void in
    if let messageFromPhone = message as? String {
          // do something with messageFromPhone
    }
})
iPhone应用程序发送字符串

wormhole.passMessageObject("message from phone to watch", identifier: "wormholeMessageFromPhone")
iPhone应用程序通过MMWormhole注册接收并在回调中再次发送(异步但很酷)

mm虫洞,苹果手表侧面

把虫洞放在你能到达的地方注意:您的组ID必须是上面的组ID

let wormhole = MMWormhole(applicationGroupIdentifier: "group.testMe.now", optionalDirectory: nil)
wormhole.listenForMessageWithIdentifier("wormholeMessageFromWatch", listener: { (message ) -> Void in
    if let messageFromWatch = message as? String {
          // do something with messageFromWatch
    }
})
let wormhole = MMWormhole(applicationGroupIdentifier: "group.testMe.now", optionalDirectory: nil)
wormhole.listenForMessageWithIdentifier("wormholeMessageFromPhone", listener: { (message ) -> Void in
    if let messageFromPhone = message as? String {
          // do something with messageFromPhone
    }
})
MMWormhole,手表应用程序注册以接收

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    universe.initWormhole(.watch, messageHandler: { (message) -> () in
        println("MMWormhole Message Came to Watch: \(message)")
    })
}
嗯,虫洞,手表应用程序发送

// force open the parent application because otherwise the message goes nowhere until the app is opened
WKInterfaceController.openParentApplication(["":""], reply: nil) 
universe.wormhole.passMessageObject("[from watch to phone]", identifier: "wormholeMessageFromWatch")

它说它不知道
MMWormhole
…我试图将它导入我的AppDelegate.swift,但当我键入
import MMWormhole
或使用
.m
.h
时,它说没有这样的模块。如果你转到根项目->构建设置并搜索“Objective-C Briding Header”,路径是否指向正确的文件?该文件的名称应类似于Projectname Briding Header.h。在这个文件中有一行
#import“MMWormhole.h”
对吗?当我搜索时,它没有显示任何目标,所以我只插入了文件名。是这样还是我需要文件的路径?哦,我添加了
#import“MMWormhole.h”
,但它仍然不起作用:/Hmm。没有客观的绑定头规范吗?看看这个。当我无法在swift中调用obj c代码时,这个链接帮助了我。不知道发生了什么,也不知道是什么解决了这个问题,但我添加、删除、导入、删除、重新阅读等等,不知怎么的,它现在确实起作用了。您的解决方案很有帮助,感谢您的代码翻译。