1

私は公共のトランジットサービスからの出発時間を示すwatchOS 3の合併症を作成しています。私は、stationName(文字列)とdepartureTime(NSDate)を持つTrainオブジェクトを含む配列を持つデータモデルを作成しました。watchOS - コンプリケーションが前のエントリーを示しています

私はgetCurrentTimelineEntry()メソッドを実装しており、エントリは時計に表示されています。問題は、時計が前のエントリだけを表示することです。

Train(startStation: "Station name", endStation: "Station name", departureTime: stringToDate(dateString: "2016-06-20 14:00")), 
Train(startStation: "Station name", endStation: "Station name", departureTime: stringToDate(dateString: "2016-06-20 14:30")), 
Train(startStation: "Station name", endStation: "Station name", departureTime: stringToDate(dateString: "2016-06-20 14:45")), 

現在時刻が14:10である場合には、(時間14時00分との)最初のエントリは、まだ時計に表示されている:例えば、私は次の出発時刻をしました。現在の時刻が14:30になるまで、そのエントリが表示されます。現在の時刻が14:10の場合は、時計の14:30の出発時刻が表示されます。

誰でも私にこれを助けたり、正しい方向に私を指摘できますか?

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: ((CLKComplicationTimelineEntry?) -> Void)) { 
    if let train = dataProvider.getTrains().nextTrain() { 
     handler(timelineEntryForTrain(train: train)) 
    } else { 
     handler(nil) 
    } 
} 


extension Array where Element : OnRailable { 
    func nextTrain() -> Element?{ 
     let now = NSDate() 
     for d in self { 
      if now.compare(d.departureTime) == .orderedAscending{ 
       return d 
      } 
     } 

     return nil 
    } 
} 

答えて

1

各エントリのタイムライン日付を、前の出発日の1分後に設定する必要があります。たとえば:

  • 午前14時30分出発のタイムラインの日付は、14:45出発のタイムラインの日付はように14時31分であること、および必要があります午前14時01分、
  • でなければなりません。

これは、今後の出発は、前の出発後の現在のタイムライン入力、1分で行うことにより、必要な所望の効果を、生成されます。

  • それは14:00、で現在出発14:00が表示されます
  • いつでも14:30から出発する出発時刻が表示されます
  • いつでも14:31から14:45の間、出発は14: 45などが表示されます。

このアプローチは、WWDC 2015 Creating Complications with ClockKitセッションで説明されています。イベントのタイムラインの日付を指定する面では、発表者はどのように言及しているのですか?

次のイベントに行くのに十分な時間があるように、前のイベントの最後にテンプレートを置く必要があります。

ここで、Paulがカレンダーの複雑さの中で言及した単純な解決策は、マッチ開始日をタイムラインエントリの日付に使用することですが、それはカレンダーにも欠点がありますそれはあなたの合併症を見て、どのゲームが始まろうとしているのかを見ることができないでしょう。

どのゲームが既に開始されているかだけ見ることができます。

実際には、ポールがカレンダーで行ったのと同じことをやりたいと思い、これらのエントリーをさらに遠くに移動したいと思います。

前回の試合が終了した時点で各エントリーが開始されます。

あなたの場合、前の列車が出発した直後に各エントリが開始されます。あなたの合併症を実装する方法を

  • 日の最後の列車が出発した後、1分であることをタイムライン終了日を指定します。現在の時刻が出発時刻を過ぎると、最後の電車の出発の詳細がグレー表示されます。

  • 転送時間の旅行をサポートすることを指定します。

  • 今後の出発予定時刻をgetTimelineEntriesForComplication(_:afterDate:limit:withHandler:)に入力してください。エントリのタイムライン日付を確認するには、エントリのpreviousTrain()メソッドの出発詳細を使用します。

(いくつかの遅延など、原因)あなたのリアルタイムの出発予定が変更された場合、あなたは、今後の出発時間を変更するタイムラインをリロードすることができます。

関連する問題