はSimulatorで動作しますが、実際のデバイスでテストするには実際のデバイスでは動作しません。混乱、私はデバイスを介してデバッグについて話しているのではなく、それがデバイス上で動作するかどうかをテストしている)。複雑さはシミュレータでは動作しますが、デバイスでは動作しません
具体的には、ウォッチ・デバイス上:
- 私は私に(シミュレータ上で
getPlaceholderTemplateForComplication
動作するため、これまでのところは良い、あまりにも)プレースホルダーテキストを与える時計の文字盤を、カスタマイズスルーウォッチの合併症を選択します。 ... - が、その後合併症は常に( シミュレータ上で
getCurrentTimelineEntryForComnplication
動作するため、適切でない )プレースホルダーテキストとしてとどまる... - タイムトラベルスループレースホルダーテキストないのちゃんをスクロールしてもGEちょうど暗くなり(正しくないため、シミュレータ上で
getTimelineEntriesForComplication:afterDate
作品)... iPhone上
Info
:WatchKit拡張で
game.duel = playoffs[“Duel”] as! String
game.tv = playoffs[“TV”] as! String
game.td = playoffs[“TD”] as! AnyObject
let dictionary = [“Duel” : game.duel, “TV” : game.tv, “TD” : game.td]
let transferComplication = WCSession.defaultSession().transferCurrentComplicationUserInfo(dictionary)
ExtensionDelegate
:
var duelArray = [String]()
var tvArray = [String]()
var tdArray = [NSDate]()
let defaults = NSUserDefaults.standardUserDefaults()
if let duel = userInfo[“Duel”] as? String, let tv = userInfo[“TV”] as? String, let td = userInfo[“TD”] as? String {
duelArray.append(duel)
tvArray.append(tv)
tdArray.append(td as! NSDate)
defaults.setObject(duelArray, forKey: “DuelSaved”)
defaults.setObject(tvArray, forKey: "TVSaved”)
defaults.setObject(tdArray, forKey: "TDSaved”)
}
ComplicationController
WatchKit拡張で:
transferCurrentComplicationUserInfo
渡すデータデータがNSUserDefaults
に保存されているウォッチExtensionDelegate
へ:
func getCurrentTimelineEntryForComplication(complication: CLKComplication, withHandler handler: ((CLKComplicationTimelineEntry?) -> Void)) {
switch complication.family {
case .ModularLarge:
let mlTemplate = CLKComplicationTemplateModularLargeStandardBody()
if let currentDuel = defaults.arrayForKey(“DuelSaved”) as? [String] {
let firstDuel = currentDuel[0]
let headerTextProvider = CLKSimpleTextProvider(text: firstDuel)
mlTemplate.headerTextProvider = headerTextProvider
} else {
// …
}
if let currentTV = defaults.arrayForKey(“TVSaved”) as? [String] {
let firstTV = currentTV[0]
let body1TextProvider = CLKSimpleTextProvider(text: firstTV)
mlTemplate.body1TextProvider = body1TextProvider
} else {
// …
}
if let currentTD = defaults.arrayForKey("TDSaved"){
let firstTD = currentTD[0]
let body2TextProvider = CLKTimeTextProvider(date: firstTD as! NSDate)
mlTemplate.body2TextProvider = body2TextProvider
} else {
// …
}
let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: mlTemplate)
handler(timelineEntry)
// …
}
func getTimelineEntriesForComplication(complication: CLKComplication, afterDate date: NSDate, limit: Int, withHandler handler: (([CLKComplicationTimelineEntry]?) -> Void)) {
let headerArray = defaults.arrayForKey(“DuelSaved”)
let body1Array = defaults.arrayForKey("TVSaved")
let body2Array = defaults.arrayForKey("TDSaved")
guard let headers = headerArray, texts = body1Array, dates = body2Array else { return }
var entries = [CLKComplicationTimelineEntry]()
for (index, header) in headers.enumerate() {
let text = texts[index]
let date1 = dates[index]
let headerTextProvider = CLKSimpleTextProvider(text: header as! String, shortText: headerShort as? String)
let body1TextProvider = CLKSimpleTextProvider(text: text as! String)
let timeTextProvider = CLKTimeTextProvider(date: date1 as! NSDate)
let template = CLKComplicationTemplateModularLargeStandardBody()
template.headerTextProvider = headerTextProvider
template.body1TextProvider = body1TextProvider
template.body2TextProvider = timeTextProvider
switch complication.family {
case .ModularLarge:
let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template)
entries.append(timelineEntry)
// …
}
func requestedUpdateDidBegin() {
let server=CLKComplicationServer.sharedInstance()
for comp in (server.activeComplications) {
server.reloadTimelineForComplication(comp)
}
}
これは、データの流れです。 ComplicationController
は、その最初のデータをNSUserDefaults
から取得します。一見
情報が不十分です。あなたの合併症は、最初に開始されたときに最初のデータをどこで取得しますか?エントリがない場合は、空の(またはnil)配列を処理している可能性があります。更新が行われた後、 'createData()'は何をしていますか?同期ですか?そうでない場合、合併症はデータなしで更新され、更新が行われた後にデータが到着する。 –
@PetahChristianいいですね、あまりにも多くの情報を投稿したくないので、もう少し追加する必要があることを教えてくれてありがとう。合併症初期データが既に*は前*情報が受信された初期データを要求しています 'transferCurrentComplicationUserInfo' – victorpulak
ClockKitから渡された' 'ExtensionDelegate's didReceiveUserInfo'内に作成されたNSUserDefaults''から来ているので、そこではありません表示する初期エントリ。初期データを取得したら、(タイムラインをリロードして)合併症を手動で更新する必要があります。 –