swift 手表连接意外退出
swift watch connectivity quits unexpectedly
我制作了一个 watchOS 连接应用程序,它可以运行。现在,我正在尝试为 iPhone 处的连接和监视创建一个专用的 classes。对于 iPhone 连接 class 我有这个(我也有其他传输数据的方法,但问题出在这里):
import UIKit
import WatchConnectivity
class iPhoneConnectivity: UIViewController, WCSessionDelegate {
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func sessionDidBecomeInactive(_ session: WCSession) {
}
func sessionDidDeactivate(_ session: WCSession) {
}
var session : WCSession!;
func getPrepared() {
if (WCSession.isSupported()) {
// check if the watch connectivity is suported on device
self.session = WCSession.default;
self.session.delegate = self;
self.session.activate();
} else {
print("Session is not supported")
}
}
}
问题是当我尝试在 ViewController
中调用此方法时
connect.getPrepared();
应用程序意外退出。
我有一个全局变量
var connect: iPhoneConnectivity!;
是不是我没有初始化connect变量?如果这是问题所在,我应该如何初始化它?
在有效的原始应用程序中,我在 ViewController 的方法 didLoad()
中有这段 getPrepared() 方法的代码
问题是 connect
是一个隐式解包的可选项,你在它上面调用一个函数而不实际初始化它。隐式展开的可选值仍然是可选值,因此如果你不给它们赋值,它们默认为 nil。因此,当您尝试访问它们而不先给它们非零值时,您将遇到运行时异常。
将 connect
定义为单例而不是全局变量。
class iPhoneConnectivity: WCSessionDelegate {
static let sharedInstance = iPhoneConnectivity()
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {}
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {}
var session : WCSession!;
func getPrepared() {
if (WCSession.isSupported()) {
// check if the watch connectivity is suported on device
self.session = WCSession.default;
self.session.delegate = self;
self.session.activate();
} else {
print("Session is not supported")
}
}
}
您可以使用 iPhoneConnectivity.sharedInstance
访问它并使用 iPhoneConnectivity.sharedInstance.getPrepared()
调用 getPrepared()
。
我制作了一个 watchOS 连接应用程序,它可以运行。现在,我正在尝试为 iPhone 处的连接和监视创建一个专用的 classes。对于 iPhone 连接 class 我有这个(我也有其他传输数据的方法,但问题出在这里):
import UIKit
import WatchConnectivity
class iPhoneConnectivity: UIViewController, WCSessionDelegate {
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func sessionDidBecomeInactive(_ session: WCSession) {
}
func sessionDidDeactivate(_ session: WCSession) {
}
var session : WCSession!;
func getPrepared() {
if (WCSession.isSupported()) {
// check if the watch connectivity is suported on device
self.session = WCSession.default;
self.session.delegate = self;
self.session.activate();
} else {
print("Session is not supported")
}
}
}
问题是当我尝试在 ViewController
中调用此方法时connect.getPrepared();
应用程序意外退出。
我有一个全局变量
var connect: iPhoneConnectivity!;
是不是我没有初始化connect变量?如果这是问题所在,我应该如何初始化它?
在有效的原始应用程序中,我在 ViewController 的方法 didLoad()
中有这段 getPrepared() 方法的代码问题是 connect
是一个隐式解包的可选项,你在它上面调用一个函数而不实际初始化它。隐式展开的可选值仍然是可选值,因此如果你不给它们赋值,它们默认为 nil。因此,当您尝试访问它们而不先给它们非零值时,您将遇到运行时异常。
将 connect
定义为单例而不是全局变量。
class iPhoneConnectivity: WCSessionDelegate {
static let sharedInstance = iPhoneConnectivity()
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {}
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {}
var session : WCSession!;
func getPrepared() {
if (WCSession.isSupported()) {
// check if the watch connectivity is suported on device
self.session = WCSession.default;
self.session.delegate = self;
self.session.activate();
} else {
print("Session is not supported")
}
}
}
您可以使用 iPhoneConnectivity.sharedInstance
访问它并使用 iPhoneConnectivity.sharedInstance.getPrepared()
调用 getPrepared()
。