watchOS 연결 응용 프로그램을 만들었고 작동합니다. 이제 iPhone과 Watch에서 Connection 전용 수업을 만들려고합니다. iPhone 연결 클래스의 경우 다음과 같습니다 (데이터를 전송하는 다른 방법도 있지만 문제는 여기에 있습니다).
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!;
연결 변수를 초기화하지 않았기 때문입니까? 그게 문제라면 어떻게 초기화해야하나요?
작동하는 원래 응용 프로그램에서 ViewController의 메서드 didLoad ()에 getPrepared () 메서드 코드가 있습니다.
문제는 connect
암시 적으로 래핑되지 않은 선택 사항이며 실제로 초기화하지 않고 함수를 호출한다는 것입니다. 암시 적으로 언 래핑 된 옵 셔널은 여전히 옵 셔널이므로 값을 제공하지 않으면 기본적으로 nil입니다. 따라서 먼저 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
하여 전화 getPrepared()
를 걸 수 있습니다 iPhoneConnectivity.sharedInstance.getPrepared()
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다