3

11 月 6 日の午前 2 時に開始し、11 月 24 日の午前 10 時に終了するイベント (「テスト イベント」と呼ばれる) があります。1 日の範囲を指定してイベントを検索しようとすると、すべての日を検索できます。 (11月6日、11月7日、…、11月23日)11月24日を除く

次のメソッドは、ユーザーが新しい日を選択するたびに呼び出されます。

- (void)loadItemsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
{
    NSLog(@"loadItemsFromDate");

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    NSLog(@"%@ to %@", [dateFormatter stringFromDate:fromDate], [dateFormatter stringFromDate:toDate]);

    // Create the predicate from the event store's instance method
    NSPredicate *predicate = [self.store predicateForEventsWithStartDate:fromDate
                                                             endDate:toDate
                                                           calendars:nil];

    NSLog(@"predicateFormat: %@", [predicate predicateFormat]);

    // Fetch all events that match the predicate
    self.currentDayEvents = [self.store eventsMatchingPredicate:predicate];

    NSLog(@"single day events:");
    for(EKEvent *event in self.currentDayEvents)
    {
        NSLog(@"title: %@, start: %@, end: %@", event.title, [dateFormatter stringFromDate:event.startDate], [dateFormatter stringFromDate:event.endDate]);
    }
    NSLog(@"\n");
}

ユーザーが 11 月 6 日を選択したときのログを次に示します (「テスト イベント」を見つけることができます)。

loadItemsFromDate
11/6/12, 12:00 AM to 11/6/12, 11:59 PM
predicateFormat: EKEventPredicate start:11/6/12, 12:00 AM; end:11/6/12, 11:59 PM; cals:(null)
single day events:
title: Vote, start: 11/6/12, 12:00 AM, end: 11/6/12, 11:59 PM
title: Test Event, start: 11/6/12, 2:00 AM, end: 11/24/12, 10:00 AM

11 月 7 日から 22 日まではすべて、11 月 23 日のこのログに似ています (「テスト イベント」を見つけることができます)。

loadItemsFromDate
11/23/12, 12:00 AM to 11/23/12, 11:59 PM
predicateFormat: EKEventPredicate start:11/23/12, 12:00 AM; end:11/23/12, 11:59 PM; cals:(null)
single day events:
title: Test Event, start: 11/6/12, 2:00 AM, end: 11/24/12, 10:00 AM

11 月 24 日のログは次のとおりです (「テスト イベント」が返されないため、期待どおりに動作しません)。

loadItemsFromDate
11/24/12, 12:00 AM to 11/24/12, 11:59 PM
predicateFormat: EKEventPredicate start:11/24/12, 12:00 AM; end:11/24/12, 11:59 PM; cals:(null)
single day events:

11 月 24 日の午前 10 時にイベントが終了するのに、なぜ 11 月 24 日のイベントが見つからないのですか? iOS 6.0.1 を実行しています。

4

1 に答える 1

2

残念ながら、iOS コードにバグがあると思います。再現する私の手順:

  1. 上記の基本的な iOS カレンダー アプリで説明したとおりに、テスト イベントを作成します。
  2. それを月ビューで見ると、2012 年 11 月 24 日にドット/マーカーがないことがわかります...これは、何か怪しいことが起こっていることを示しています。次に、24 番目のタイルをクリックして、イベントが実際にリストされていることに注意してください。
  3. 次に、イベントを終日イベントに変更します (開始時刻から午前 2 時、終了時刻から午前 10 時を効果的に削除します)。
  4. それを月ビューで見ると、2012 年 11 月 24 日にドット/マーカーがあることがわかります。

これを回避する方法はまだわかりませんが、アプリのコードがあなたと同じ問題を示していることを確認できます。

于 2012-11-18T00:54:18.323 に答える