2016-02-12 61 views
1

我正在做Apple Watch App,其中併發症對`ComplicationController'使用`InterfaceController`邏輯

我已經得到了WatchKit應用部分與該Ev類工作的偉大 ...

class Ev { 
    var evTColor:String 
    var evMatch:String 

    init(dataDictionary:Dictionary<String,String>) { 
     evTColor = dataDictionary["TColor"]! 
     evMatch = dataDictionary["Match"]! 
    } 

    class func newEv(dataDictionary:Dictionary<String,String>) -> Ev { 
     return Ev(dataDictionary: dataDictionary) 
    } 

} 

...這InterfaceController

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) { 

    if let tColorValue = userInfo["TColor"] as? String, let matchValue = userInfo["Match"] as? String { 

     receivedData.append(["TColor" : tColorValue , "Match" : matchValue]) 
     evs.append(Ev(dataDictionary: ["TColor" : tColorValue , "Match" : matchValue])) 

     doTable() 

    } else { 
     print("tColorValue and matchValue are not same as dictionary value") 
    } 

} 


func doTable() { 

    self.rowTable.setNumberOfRows(self.evs.count, withRowType: "rows") 

    for (index, evt) in evs.enumerate() { 

     if let row = rowTable.rowControllerAtIndex(index) as? TableRowController { 

      row.mLabel.setText(evt.evMatch) 
      row.cGroup.setBackgroundColor(colorWithHexString(evt.evTColor)) 

     } else { 
      print("nope") 
     } 
    } 

} 

我有一個硬在我的Complication中獲得同樣的東西,任何想法?

我不確定我是否可以對我的ExtensionDelegate使用相同的Ev代碼,然後確定要放入我的ComplicationController

如果我用我的ExtensionDelegate我得到一個致命錯誤相同Ev代碼:使用未實現初始化的init()的。

在我ComplicationController我不知道如何去使用最好的我已經從InterfaceController有數據ComplicationController填寫getCurrentTimelineEntryForComplication & getTimelineEntriesForComplication方法。

將根據需要發佈任何額外的代碼,謝謝!

編輯: 每一個問題,我的數據來自CloudKit的iPhone應用程序(我然後通過WCSession傳遞到監視應用程序,所以我的問題是訪問在我的收藏應用程序的數據爲我併發症)

+0

你的數據來自哪裏?數據庫?一個遠程API? –

+0

CloudKit將數據提供給iPhone應用程序,然後將該數據傳遞給Watch應用程序。這部分工作很好,我只需要訪問我的手錶應用程序的數據,以填補你知道的併發症? (我會在我的問題中注意到CloudKit的一部分) – SRMR

回答

3

而不必你InterfaceController實施並收到WCSession的消息,我會成立接收這些信息,而一個單獨的類。該課程可以解析和整理來自WCSession的用戶信息數據。這個單類可以/將可以訪問你的ComplicationController和你InterfaceController

單身是相當容易安裝在SWIFT:

class DataManager : WCSessionDelegate { 
    // This is how you create a singleton 
    static let sharedInstance = DataManager() 

    override init() { 
     super.init() 
     if WCSession.isSupported() { 
      self.watchConnectivitySession?.delegate = self 
      self.watchConnectivitySession?.activateSession() 
     } 
    } 

    // This is where you would store your `Ev`s once fetched 
    var dataObjects = [Ev]() 

    // This is the method that would fetch them for you 
    func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) { 
     //parse your userInfoDictionary 
     self.dataObjects = evs 
    } 
} 

然後在你的InterfaceController您使用DataManager.sharedInstance.dataObjects建立可以參考它的InterfaceControllerComplicationsController

與一個單身的想法是,你有一個全球性的參考。 DataManager只能實例化一次。

+0

就是那種我已經用「Ev」進行過的或者沒有? – SRMR

+0

「Ev」似乎只是一個模型對象。你的singleton對象將包含一個'Ev'對象的集合,你可以使用它來構建你的'InterfaceController'以及你的'ComplicationController'。單身人士也會收到'WCSession'消息並創建Ev'對象 –

+0

我知道這是一個非常常見的事情,但我從來沒有這樣做過,所以如果您有任何關於使用watchOS 2的文章,不勝感激!然後,我可以放棄它。我基本上是想用'ExtensionDelegate'作爲一個單身人士,並且很難弄清楚你應該怎樣看待你知道的 – SRMR