- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我尝试发送内容时收到 WCSession 尚未激活错误。而且我不知道我做错了什么。我已经测试了一些“必须”工作的预制解决方案。但它在我的模拟器和物理设备上不起作用。
部分代码:
我的应用委托(delegate):
import UIKit
import CoreData
import WatchConnectivity
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate {
var window: UIWindow?
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : String]) -> Void) {
replyHandler(["message": "Hello Watch!"])
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func sessionDidBecomeInactive(_ session: WCSession) {
}
func sessionDidDeactivate(_ session: WCSession) {
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
return true
}
........
}
我的接口(interface) Controller :
import WatchKit
import Foundation
import WatchConnectivity
class InterfaceController: WKInterfaceController {
override func awake(withContext context: Any?) {
super.awake(withContext: context)
// Configure interface objects here.
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
if WCSession.default().isReachable {
let messageDict = ["message": "hello iPhone!"]
WCSession.default().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
//print(replyDict)
}, errorHandler: { (error) -> Void in
// print(error)
})
}
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
}
扩展委托(delegate):
import WatchKit
import WatchConnectivity
class ExtensionDelegate: NSObject, WKExtensionDelegate, WCSessionDelegate {
func applicationDidFinishLaunching() {
// Perform any final initialization of your application.
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
}
....
是否有错误的代码或实现?因为没有什么对我有用。
最佳答案
我想出了我遇到的问题,我认为你的问题也很相似。我试图在调用 activate()
后立即发送消息,这在过去有效,但自从引入 session(activationDidCompleteWith:)
函数后,我需要发送我的消息来自那里。
所以我认为您的解决方案是以下之一:
WCSessionDelegate
,移动所有WCSession
在那里激活调用,并从 session (activationDidCompleteWith:)
session(activationDidCompleteWith:)
在 ExtensionDelegate
中(在我的应用程序我处理 ExtensionDelegate
)session(activationDidCompleteWith:)
中发布通知ExtensionDelegate
并添加一个观察者来处理它接口(interface) Controller
除此之外,我认为您可能还有一个问题,因为您的 AppDelegate 中 session(didReceiveMessage:)
的声明是错误的(或者至少我在尝试您的代码时遇到了问题。 )
新的声明是:
func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)
关于swift - WCSession 尚未激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40707988/
我的 iOS 应用程序通过 WatchConnectivity 框架发送及时的信息。接收方实现 WCSession 的委托(delegate)。 我有 2 个 interfaceControllers
当我调用 session.activateSession() 方法时,我遇到了 WatchKit 连接 session 无法激活的问题。这是我用来设置 session 的代码。 if (WCSessi
我有一个带有“今日”扩展程序的应用程序和一个 watch 应用程序。从主应用程序 WCSession 工作正常,数据传输到 watch 并正确接收,但是当我尝试通过今日小部件中的 WCSession
Apple 文档显示: PayloadTooLarge - An error indicating that the item being sent exceeds the maximum size
有没有办法取消WCSession的sendMessage(_:replyHandler:errorHandler:)方法发送的消息? 来自documentation : Messages are qu
在我的应用程序中,我必须将信息从 watch InterfaceController 发送到手机 HomeViewController。但是,当我运行我的代码时,这些信息只有效一次。为了让它再次运行,
我在从父设备向 Apple Watch 发送文件时遇到问题。有时文件会通过并被完全解析。其他时候,它开始文件传输,但它失败了,甚至从未在 Apple Watch 上调用 session:(WCSess
当我尝试发送内容时收到 WCSession 尚未激活错误。而且我不知道我做错了什么。我已经测试了一些“必须”工作的预制解决方案。但它在我的模拟器和物理设备上不起作用。 部分代码: 我的应用委托(del
在 iOS 和 iWatch 设备之间建立连接,xCode 写入 [WC] WCSession 对应应用程序未安装。 经过大量研究,我找到了一个解决方案,也许它会对某人有所帮助。 - Check yo
委托(delegate)函数返回之前是否需要调用replyHandler?我需要进行几次 Web 服务 API 调用才能回复,以下实现正确吗? func session(_ session: WCSe
根据我的经验,我注意到为 WatchKit 应用程序创建两个或多个界面 Controller (IC) 时,AppleWatch 在用户滑动到它之前开始加载下一个界面。这可能对系统性能很有用,但后来有
我正在尝试向我的应用程序添加简单的WatchOS 2.0功能,以允许在手表上触发简单的操作并在iPhone上的主应用程序中产生效果。所有这些取决于使用WCSession的sendMessage方法从手
我正在从 iPhone 向 Watch (WatchOS2) 发送一条消息,其中 iPhone 上运行着一个内部计时器。每隔 30 秒,我就会从 iPhone 发送消息以供观看。不幸的是,发送消息仅在
我正在开发一个带有 watch 扩展 (watchOS 2) 的 iPhone 应用程序 (iOS 9 beta),并使用 WCSession 将数据从 watch 传递到手机。 我有 2 个使用 W
我正在使用 WCSession 的 tranferUserInfo 在 watch 和 iOS 应用程序之间发送数据,以获取当任一产品处于后台时需要处理的信息。这在模拟器上 100% 的时间都有效,但
Apple 是否表明对于 sendMessage(_ message: [String : AnyObject]...) 从 watch 到 iPhone 的传输时间的实际预期是多少?对于单个字符串的
我在使用 WCSession activateSession 时遇到了问题。我在我的 viewDidLoad 方法中添加了这段代码,它在调用 activateSession 时崩溃了。 sendMes
我正在使用 WatchKit 2.0,我注意到一个非常奇怪的行为。如果我使用我的 watch 应用程序超过 5 分钟,我开始从 WCSession sendMessage 调用中收到超时错误,该调用之
我正在使用 Xamarin 开发 Apple Watch 应用。我正在尝试使用 SendMessage 函数从我的 watch 向 iPhone 发送消息。当我这样做时,我收到了 out 错误消息 p
我想知道什么时候会在 watch 和 iOS 设备上的 WCSession 对象上调用 activateSession()。 在文档中它说: 在调用任何与 session 相关的方法之前,始终分配一个
我是一名优秀的程序员,十分优秀!