0

ユーザーが指定された 1 つのカレンダーでイベントを作成できるようにするアプリを作成しようとしています。

問題はそれです:

使用したいタイトルのカレンダーがあるかどうかを知るための解決策が見つかりません。

リストが空の場合は、カレンダーを作成するコードを記述しますが、リストが空でない場合は、必要なカレンダーがあるかどうかを知る必要がcalendar.titleあります。

カレンダーがない場合は、カレンダーを作成します。ある場合は、このカレンダーにイベントを追加します。

以下は私が使用しているコードです:

EKEvent *myEvent;
EKEventStore *store;
EKSource* localSource;
EKCalendar* newCal;

store = [[EKEventStore alloc] init];
myEvent = [EKEvent eventWithEventStore: store];
NSString* title         = [arguments objectAtIndex:1];
NSString* location      = [arguments objectAtIndex:2];
NSString* message       = [arguments objectAtIndex:3];
NSString* startDate     = [arguments objectAtIndex:4];
NSString* endDate       = [arguments objectAtIndex:5];
NSString* calendarTitle = [arguments objectAtIndex:6];
//NSString* calID = nil;
//int i = 0;

EKCalendar* calendar = nil;
if(calendarTitle == nil){
    calendar = store.defaultCalendarForNewEvents;
} else {
    NSIndexSet* indexes = [store.calendars indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
        *stop = false;
        EKCalendar* cal = (EKCalendar*)obj;
        if(cal.title == calendarTitle){
            *stop = true;
        }
        return *stop;
    }];

    if (indexes.count == 0) {
        //if list is empty i haven't calendars then i need to create it
        for (EKSource* source in store.sources)
        {
            if (source.sourceType == EKSourceTypeLocal)
            {
                localSource = source;
                break;
            }
        }

        if (!localSource) return;

        newCal = [EKCalendar calendarWithEventStore:store];
        calendar.source = localSource;
        calendar.title = calendarTitle;

        NSError* error;
        bool success = [store saveCalendar:newCal commit:YES error:&error];

        if (error != nil)

        {
            NSLog(error.description);
        }
        //calendar created

    } else {

        //!Empty List i need to search the calendar with the title = calendarTitle
        //And if there isn't i need to create it



        //calendar = [store.calendars objectAtIndex:[indexes firstIndex]];
    }
}
4

1 に答える 1

0

問題は、indexesOfObjectsPassingTest の実装だと思います。インデックスを返していないため、インデックスを 1 つ見つけた後に停止しようとするため、単数形の indexOfObjectPassingTest を使用する必要があります。次のように非常に簡単に書くことができます。

     NSUInteger* indx = [store.calendars indexOfObjectPassingTest:^BOOL(EkCalendar *cal, NSUInteger idx, BOOL *stop) {
     return [cal.title isEqualToString:calendarTitle];
    }];

次に、インデックスが NSNotFound ではないことを確認した後、使用します

calendar = store.calendars[indx];
于 2013-01-29T18:55:49.437 に答える