2015-01-12 44 views
2

我正在開發一款在手錶和iOS父應用程序之間進行通信的應用程序。它通過打開WatchKit擴展將數據發送到父應用程序。我知道openParentApplication:reply被叫時會從Apple Watch打開iPhone應用程序。之後,application:handleWatchKitExtension:reply在應用的代理中被調用。openParentApplication:reply是否需要啓用應用程序組功能?

從那裏,你可以打開一個通知與視圖控制器:

NSNotificationCenter.defaultCenter().postNotificationName(aName: String, object anObject: AnyObject?) 

「aName」是,你可以在視圖電腦板開什麼了:

NSNotificationCenter.defaultCenter().addObserver(self, 
     selector: Selector("handleWatchKitNotification:"), 
     name: "WatchKitSaysHello", 
     object: nil) 

這裏是我的代碼爲我的接口控制器在我的WatchKit擴展:

// 
// InterfaceController.swift 
// SendColors WatchKit Extension 
// 
// Created by Tommy on 12/30/14. 
// Copyright (c) 2014 Tommy. All rights reserved. 
// 

import WatchKit 
import Foundation 


class InterfaceController: WKInterfaceController { 

var ypo = false 

override func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 

    // Configure interface objects here. 
} 

@IBOutlet weak var redButton: WKInterfaceButton! 

@IBOutlet weak var greenButton: WKInterfaceButton! 

@IBOutlet weak var blueButton: WKInterfaceButton! 

@IBAction func onRedButtonClick() { 
    if ypo { 
     openParentAppWithColor("Yellow") 
    } 
    else { 
     openParentAppWithColor("Red") 
    } 
} 

@IBOutlet weak var moreButton: WKInterfaceButton! 

@IBAction func moreButtonClick() { 
    if !ypo { 
     ypo = true 
     redButton.setTitle("Yellow") 
     redButton.setColor(UIColor.yellowColor()) 
     greenButton.setTitle("Purple") 
     greenButton.setColor(UIColor.purpleColor()) 
     blueButton.setTitle("Orange") 
     blueButton.setColor(UIColor.orangeColor()) 
     moreButton.setTitle("Back") 
    } 
    else { 
     ypo = false 
     redButton.setTitle("Red") 
     redButton.setColor(UIColor.redColor()) 
     greenButton.setTitle("Green") 
     greenButton.setColor(UIColor.greenColor()) 
     blueButton.setTitle("Blue") 
     blueButton.setColor(UIColor.blueColor()) 
     moreButton.setTitle("More...") 
    } 
} 

@IBAction func onGreenButtonClick() { 
    if ypo { 
     openParentAppWithColor("Purple") 
    } 
    else { 
     openParentAppWithColor("Green") 
    } 
} 

@IBAction func onBlueButtonClick() { 
    if ypo { 
     openParentAppWithColor("Orange") 
    } 
    else { 
     openParentAppWithColor("Blue") 
    } 
} 

override func willActivate() { 
    // This method is called when watch view controller is about to be visible to user 
    super.willActivate() 
} 

override func didDeactivate() { 
    // This method is called when watch view controller is no longer visible 
    super.didDeactivate() 
} 

private func openParentAppWithColor(color: String) { 
    if ["color": color] != nil { 
    if !WKInterfaceController.openParentApplication(["color": color], reply: { (reply, error) -> Void in 
      println(reply) 
    }) { 
      println("ERROR") 
     } 
    } 
} 
} 

我的問題是說,我點擊了手表模擬器上的紅色按鈕。該動作將被調用,並在該動作中調用openParentApplicationWithColor("Red"),這將調用WKInterfaceController.openParentApplication(["color": color], reply: { (reply, error) -> Void in })這應該做的是在模擬器上打開父應用程序。它將在背景中打開它。我,因此手動打開它。當我手動打開應用程序時,背景是完全黑色的。
我懷疑問題是我沒有在Capabilities選項卡中啓用App Groups。爲了做到這一點,您需要參與開發人員計劃。我應該加入它來做到這一點,還是存在另一個問題?我正在使用Xcode 6.2 Beta 3.提前謝謝大家!

回答

7

我已經測試過,可以確認openParentApplication:回覆:是否不是要求啓用應用組。

我明白,openParentApplication:回覆,當被調用時,從Apple Watch打開iPhone應用程序。

此方法在後臺打開iPhone應用。在之前的Xcode 6.2 beta版本中,應用程序確實在前臺打開,但這不是預期的行爲,也不是WatchKit Extension-iPhone應用程序通信在發佈版本中的工作方式。

您仍然可以手動在前臺啓動iPhone應用程序,但這不是必需的,除非您要測試同時使用兩者的用例。至少在目前可用的API中,iPhone應用程序無法由手錶應用程序以編程方式啓動到前臺,並且手錶應用程序無法以iPhone應用程序的編程方式啓動。

一旦應用程序啓動,您已經報告,當您希望它根據您發送的消息更改顏色時,屏幕仍爲黑色。在iPhone應用程序中調用application:handleWatchKitExtension:reply:?如果您在WatchKit擴展程序中接收到執行的回覆塊,您應該知道它肯定會被調用,該擴展程序應該是從println(reply)輸出某些內容。如果是這樣,那麼問題在於iPhone應用程序中的代碼對您傳遞給它的消息做了些什麼。在你的App應用程序的AppDelegate中看到你的方法實現會很有用。 (請注意,如果該方法未能調用回覆塊,它可能仍然在接收郵件,並且您不會收到回覆,但是您會看到有關未收到回覆的錯誤消息。)

請注意,在最初運行Watch擴展時,您將無法在Xcode中看到NSLog消息或獲取斷點,但您可以選擇Debug> Attach to process> [在'可能目標'下選擇您的iPhone應用程序],然後您將獲取iPhone應用程序的日誌和斷點而不是Watch應用程序,同時仍然可以在手錶模擬器中使用Watch應用程序。對調試最有用。

+0

謝謝你回答這個問題,但是當我手動打開它時,我得到一個黑色的屏幕,而不是我在觀察窗口中單擊的顏色。黑屏是否應該發生? – Tom

+0

你在iPhone應用程序中出現黑屏? –

+0

這是正確的。 – Tom

0

我正在使用Xcode 6.2 Beta 5.選擇Debug> Attach to process> [在可能的目標下選擇您的iPhone應用程序無法正常工作。我看到了NSLogs的Watch擴展,但沒有在iPhone應用程序委託和iPhone應用程序的視圖控制器。

1

不,您不需要使組使能ole父應用程序。您可以請求打開父IOS應用程序,並等待IOS應用程序的回覆,而無需設置組應用程序。只需要在使用NSUserDefauts和套件名稱在watchkit應用程序和IOS應用程序之間共享數據時設置組應用程序。

相關問題