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")
}
}
}
問題は、私は
connect.getPrepared();
のViewController
でこのメソッドを呼び出すしようとすると、
アプリケーションが予期せず終了します。
私はグローバル変数
var connect: iPhoneConnectivity!;
は、私は、接続変数を初期化しなかったためということですか?それが問題なら、どのように初期化する必要がありますか?働く元のアプリケーションでは、
、私はgetPrepared()問題がconnect
が暗黙のうちに開封されたオプションで、あなたが実際に初期化せず、それに関数を呼び出すことである
あなたの質問を編集して、コールビューコントローラからiPhoneConnectivityをどのように/初期化するかを表示できますか?私はあなたが 'connect.getPrepared()'を呼び出す前に起こらなければならないと仮定します。また、Swiftでは、コードの各行の後にセミコロン( ";' ')を置く必要はありません(セミコロンはObjective-Cでなければなりません)。 –
@MichaelDautermannが既に言っていることに加えて、あなたのクラスは 'UIViewController'から継承するべきではないと思います。 'MVC'デザインパターンに続いて、このクラスはModelクラスでなければならず、したがって、UI関連のタスクから完全に独立している必要があります。あなたのクラスにUI関連のコードも表示されないので、 'UIViewController'を継承しても意味をなさないので必要ありません。さらに、このようなクラスでは、シングルトンとして「iPhoneConnectivity」を作成する方が良いアプローチだと思います。 –
私は変数 'connect'を初期化しないでください。私は静的な方法でそれを行うことはできないので、関数getPrepared()を呼び出すために使用します。私はiPhoneConnectivityはモデルクラスでなければならないことを知っていますが、UIViewControllerから継承を停止するとエラーが発生します。 セミコロンはオプションであることも知っていますが、私はこのように好きです。 しかし、私はUIViewcontrollerフォームを継承しているという事実は私が持っている問題でしょうか?私はエラーがない、アプリはコンパイルされているが、かなり予期せず。 –