WatchKit Complication:从扩展委托获取复杂数据

SRM*_*RMR 6 xcode ios swift watchkit watchos-2

我在WatchKit扩展中获得了所需的所有数据(从iOS应用程序传递).

我使用WatchKit中的数据InterfaceController填写表格,该表格完美无缺.

我正试图找出在WatchKit中获取相同数据ComplicationController的最佳方法.

目前,在InterfaceController,使用didReceiveUserInfo以下内容传递数据:

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

    if let beachValue = userInfo["Surf"] as? String {

        places.append(Place(dataDictionary: ["Surf" : surfValue]))

    } else {
        print("Something went wrong")
    }

}
Run Code Online (Sandbox Code Playgroud)

我是否需要WCSession在我的同一个方法中调用相同的方法ComplicationController并重新获取整个数据,或者是否有更简单的方法来访问相同的数据以供在中使用ComplicationController

任何帮助赞赏.谢谢!

编辑:

我的表功能:

func makeTable() {

    // Per SO
    let myDelegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
    let accessVar = myDelegate.places
    self.rowTable.setNumberOfRows(accessVar.count, withRowType: "rows")

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

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

            row.mLabel.setText(evt.evMat)

        } else {
            print(“No”)
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Ant*_*oni 10

// Get the complication data from the extension delegate.
let myDelegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
var data : Dictionary = myDelegate.myComplicationData[ComplicationCurrentEntry]!
Run Code Online (Sandbox Code Playgroud)

以上来自Apple的Doc只是一个例子,可以将您的复杂功能所需的数据存储在您的扩展代表中,了解如何以单一方式轻松访问它.对"myComplicationData"的引用是Dictionary的示例,默认情况下不是ExtensionDelegate中的参数.

要么将您自己的类设置为单个按钮,它会为您的手表保存数据,如下所示:

// Access by calling:
// Model.sharedModel.modelVal1
class Model {
    static let sharedModel = Model()
    var modelVal1: Float!
    var modelVal2: String!
}
Run Code Online (Sandbox Code Playgroud)

或者使用扩展委托作为您的单身人士,并将您的属性添加到其类中,如下所示.这将允许您访问在ExtensionDelegate中创建的任何变量.

// ExtensionDelegate.swift
class ExtensionDelegate: NSObject, WKExtensionDelegate {
    var dataVar1: Float!
    var dataVar2: String!
    var myDictionary: [String: String]!
}


// ComplicationController.swift
import WatchKit

class ComplicationController: NSObject, CLKComplicationDataSource {

    func someMethod() {
        let myDelegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
        // Here is an example of accessing the Float variable 
        let accessVar = myDelegate.dataVar1
        let myDict = myDelegate.myDictionary
    }
}
Run Code Online (Sandbox Code Playgroud)

使用任何一种方法都有助于将您的数据保存在一个位置,这样您就可以随时从手表扩展程序中的任何类访问它.