私は現在の日または将来の日に起こっていることに関する情報を表示するwatchOSの問題を持っています。合併症の場合と同様に、私は、をgetCurrentTimelineEntryForComplication:withHandler:
とgetTimelineEntriesForComplication:afterDate:limit:withHandler:
などのさまざまな方法で設定しています。これらのメソッドが呼び出されると、CLKComplicationTemplate
というサブクラスを使用して、CLKComplicationTimelineEntry
を作成します。このサブクラスは複雑な型に適しています。watchOSの複雑な問題で「今日」や「明日」のような相対日付を使用するにはどうすればよいですか?
「モジュラーラージ」合併症タイプ(CLKComplicationFamilyModularLarge
)は、私に最も困っているものです。このタイプでは、見出しが適切なときに「今日」または「明日」と言ってほしい。下には、その日の出来事についてのテキストがあります。現在、私はこのためCLKRelativeDateTextProvider
を使用しています:
template.headerTextProvider = [CLKRelativeDateTextProvider textProviderWithDate:date style:CLKRelativeDateStyleNatural units:NSCalendarUnitDay];
これは非常に私がやりたいことはありませんけれども、それは「0DAYS」または「1DAY」のようなものを示しています。それはより小さな合併症のために受け入れられるが、モジュラーラージでは特に厄介なように見える。どれくらいの余分な部屋があっても、数字の後にスペースがありません。
NSDateFormatter
を使用して文字列を生成し、次にそれを表示するためにCLKSimpleTextProvider
を使用してこれを修正できると考えました。
NSDateFormatter *formatter = [NSDateFormatter new];
formatter.doesRelativeDateFormatting = YES;
formatter.dateStyle = NSDateFormatterShortStyle;
formatter.timeStyle = NSDateFormatterNoStyle;
NSString *string = [formatter stringFromDate:date];
しかし、問題があります:十分に簡単なように見えたwatchOSの合併症は将来の日付のデータを供給できるようにする必要がありますが。私が言うことができる限り、NSDateFormatter
には、出力を相対的にする日付をいつでも指定する方法がありません。常に現在の日付に相対的です。したがって、合併症データの日付が明日であり、getTimelineEntriesForComplication:afterDate:limit:withHandler:
が呼び出された場合、生成するすべてのタイムラインエントリは「明日」と表示されます。それは今日の日には間に合うでしょうが、深夜になると間違っています。すべての複雑なデータが再び生成されるまで、「Tomorrow」と表示されます。
私はこの問題のカップルの解決策を考えることができましたし、彼らは両方の欠点を持っている:
私が日付の日数離れて計算することができるとちょうど
CLKSimpleTextProvider
文字列与えるを "それが適切なときに「今日」または「明日」を選択します。私の主な関心事は、私がNSDateFormatter
を私のアプリのどこかで使っていることです。私はそれと一貫していたいと思います。それを説明するための様々な言語があれば、それは自明ではありません。単純な例を挙げると、フランス語は "après-demain"を使用しています。これは "明日の日"を意味します。私は
NSDateFormatter
に間違った日付を与えて、私に必要な出力を与えてもらうことができます。合併症の日付が6月14日で、現在6月13日だとしましょう。私のアプリが現在の日のタイムラインエントリを作成しているとき、それは6月14日の日付( "明日")を使って私の日付フォーマッタを呼び出します。しかし、深夜のタイムラインデータを作成する必要があるときは、6月13日の日付フォーマッタ( "Today")を呼び出します。これは、うるう年や時間の変更など何らかの状況で壊れてしまう恐ろしいアイデアのようです。私はすでにCLKRelativeDateTextProvider
以外のものを使用したくないですが、私はのを好きではありません。
私は他に何ができるのか分かりません。私は既に日付形式設定のオプションを求めるレーダー(27267550: CLKRelativeDateTextProvider should offer more control)を提出しています。それは一歳であり、watchOS 4で対処される兆候は見られません。
これを解決する最も良い方法は何ですか?
これは私の心を邪魔しましたが、私はそれが好きではありませんでした。それはタイムトラベルを破り、真夜中以降にデータが失われる可能性があります。つまり、私は今もすべてのデータを提供できることに気づき、 'CLKRelativeDateTextProvider'を使って真夜中過ぎのデータの" 0DAYS "表示を取得するだけです。まだ完璧ではありませんが、これはこれまでのところ最高の解決策だと思います。 – robotspacer