0

タブバー環境内で Kal フレームワークを利用する iPhone アプリケーションを作成しました。

EVENTKIT フレームワークを使用して新しいイベントを作成すると、次のようにユーザーに表示されます。 ここに画像の説明を入力

[完了] をクリックすると、イベントが保存されます。

しかし、Kal カレンダーを表示すると、同じイベントに対して 2 つのエントリが表示されます。 ここに画像の説明を入力

アプリケーションを閉じてから再度開くと、1 つのセルにイベント エントリが正しく表示されます。

しかし、追加した直後に同じイベントが2回表示される理由がわかりません..

誰でも助けることができますか?

編集: 「今日」ボタンをクリックすると、データをリセット/更新するように見え、正しく機能します..現在、イベントが追加されるたびに更新/リセットする方法を見つけようとしています..

どんな助けでも大歓迎です:)

4

2 に答える 2

3

コードが NativeCal の例に基づいている場合、バグがあります。

- (void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate

[events removeAllObjects]は関数の先頭で呼び出され、ブロックの後半で再設定されるためdispatch_async、最初の呼び出しが完了する前に関数が再度呼び出されると、イベント リストに重複したイベントが含まれる可能性があります。dispatch_asyncメインスレッドへのコールバックでブロックへの呼び出しを変更dispatch_syncし、その呼び出しのイベントリストをクリアして、次のコードを生成することでこれを修正しました。

dispatch_async(eventStoreQueue, ^{
  NSDate *fetchProfilerStart = [NSDate date];
  NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:fromDate endDate:toDate calendars:nil];
  NSArray *matchedEvents = [eventStore eventsMatchingPredicate:predicate];
  dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"Fetched %d events in %f seconds", [matchedEvents count], -1.f * [fetchProfilerStart timeIntervalSinceNow]);
    [events removeAllObjects];
    [events addObjectsFromArray:matchedEvents];
    [delegate loadedDataSource:self];
  });
});
于 2011-06-22T14:21:07.207 に答える
0

Kalカレンダーにイベントを追加するためのソリューションに戸惑っています。ヘッダーファイルと実装ファイルKalDataSource.hとKalDataSource.mを読んでいたところ、イベントを作成するためのすべてのコードがそこで発生するはずです。とにかく、カルカレンダーにイベントを追加する際に何をしたか教えていただけますか?

于 2013-02-23T07:48:55.233 に答える