WatchKit Complication:从扩展委托中获取 Complication 数据
WatchKit Complication: get Complication data from extension delegate
我的 WatchKit 扩展中有我需要的所有数据(从 iOS 应用程序传递)。
我用WatchKitInterfaceController
里面的数据填了一个table,效果很好
我正在尝试找到 在我的 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")
}
}
我是否需要在我的 ComplicationController
中调用相同的 WCSession
方法并重新抓取整个数据,或者是否有更简单的方法 我访问相同的数据 用于 ComplicationController
?
感谢任何帮助。谢谢!
编辑:
我的table函数:
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”)
}
}
}
好吧,我在我的应用程序中所做的是设置另一个 singelton class 来负责为我的 Watch 应用程序和复杂功能获取和保存数据。但这对我来说似乎不是最好的方法。不幸的是我没有得到苹果代码
var data : Dictionary = myDelegate.myComplicationData[ComplicationCurrentEntry]!
完全没有。我不明白这个 myComplicationData
来自哪里。
// Get the complication data from the extension delegate.
let myDelegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
var data : Dictionary = myDelegate.myComplicationData[ComplicationCurrentEntry]!
以上 Apple's Doc 只是一个示例,说明如何在扩展委托中存储复杂功能所需的数据,以了解如何作为单例轻松访问它。对 "myComplicationData" 的引用是 Dictionary 的示例,默认情况下不是 ExtensionDelegate 中的参数。
将您自己的 class 设置为单例,像这样为您的手表保存数据:
// Access by calling:
// Model.sharedModel.modelVal1
class Model {
static let sharedModel = Model()
var modelVal1: Float!
var modelVal2: String!
}
或者使用扩展委托作为您的单例并将您的属性添加到它的 class 中,如下所示。这将允许您访问您在 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
}
}
使用任何一种方式都有助于将您的数据保存在一个位置,这样您就可以随时从手表扩展程序中的任何 class 访问它。
我的 WatchKit 扩展中有我需要的所有数据(从 iOS 应用程序传递)。
我用WatchKitInterfaceController
里面的数据填了一个table,效果很好
我正在尝试找到 在我的 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")
}
}
我是否需要在我的 ComplicationController
中调用相同的 WCSession
方法并重新抓取整个数据,或者是否有更简单的方法 我访问相同的数据 用于 ComplicationController
?
感谢任何帮助。谢谢!
编辑:
我的table函数:
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”)
}
}
}
好吧,我在我的应用程序中所做的是设置另一个 singelton class 来负责为我的 Watch 应用程序和复杂功能获取和保存数据。但这对我来说似乎不是最好的方法。不幸的是我没有得到苹果代码
var data : Dictionary = myDelegate.myComplicationData[ComplicationCurrentEntry]!
完全没有。我不明白这个 myComplicationData
来自哪里。
// Get the complication data from the extension delegate.
let myDelegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
var data : Dictionary = myDelegate.myComplicationData[ComplicationCurrentEntry]!
以上 Apple's Doc 只是一个示例,说明如何在扩展委托中存储复杂功能所需的数据,以了解如何作为单例轻松访问它。对 "myComplicationData" 的引用是 Dictionary 的示例,默认情况下不是 ExtensionDelegate 中的参数。
将您自己的 class 设置为单例,像这样为您的手表保存数据:
// Access by calling:
// Model.sharedModel.modelVal1
class Model {
static let sharedModel = Model()
var modelVal1: Float!
var modelVal2: String!
}
或者使用扩展委托作为您的单例并将您的属性添加到它的 class 中,如下所示。这将允许您访问您在 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
}
}
使用任何一种方式都有助于将您的数据保存在一个位置,这样您就可以随时从手表扩展程序中的任何 class 访问它。