2

私は多くのコードを見ましたが、まだ解決策が得られませんでした.

アプリのアイコンバッジを毎日更新し、その日のカレンダー (グレゴリオ暦ではない) 番号を取得する必要があります。

どうやってやるの?

4

2 に答える 2

0

あなたがそれをどのようにコーディングするかはわかりませんが、そのようなアプリをアプリ ストアに提出しようとしても、アップルはそれを承認しません。Apple の厳格なレビュー ガイドラインはイライラする可能性があり、この場合のように、アプリの機能が制限されます。ごめん :(

于 2012-07-11T16:47:19.320 に答える
0

アプリケーション バッジ番号を指定する必要があるため、繰り返しローカル通知を使用できないことは明らかです。したがって、午前 0 時にスケジュールされ、適切なバッジ番号を使用して、毎日 1 つのローカル通知を使用する必要があります。

最大 64 個のローカル通知しかスケジュールできないため、アプリケーションを起動するたびに通知をキューに入れる必要があります。

このコードはテストされていません。夏時間などに問題がある可能性があります。 (iOS 4.2 以降、ARC を使用して動作)

- (void) applicationDidBecomeActive:(UIApplication *)application {
    NSUInteger startingDayAfterToday = [application.scheduledLocalNotifications count];
    NSArray *localNotifications = [self localNotificationsStartingOnDayAfterToday:startingDayAfterToday];
    NSArray *newScheduledNotifications = [application.scheduledLocalNotifications arrayByAddingObjectsFromArray:localNotifications];
    [application setScheduledLocalNotifications:newScheduledNotifications];
}

- (NSArray *) localNotificationsStartingOnDayAfterToday:(NSUInteger)startingDayAfterToday {
    NSMutableArray *localNotifications = [[NSMutableArray alloc] initWithCapacity:64 - startingDayAfterToday];
    for (NSUInteger i = startingDayAfterToday; i < 64; i++) {
        // Create a new local notification
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        notification.hasAction = NO;

        // Create today's midnight date
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; // Could be other calendar, too
        NSDateComponents *todayDateComponents = [calendar components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
        NSDate *todayMidnight = [calendar dateFromComponents:todayDateComponents];

        // Create the fire date
        NSDateComponents *addedDaysComponents = [[NSDateComponents alloc] init];
        addedDaysComponents.day = i;
        NSDate *fireDate = [calendar dateByAddingComponents:addedDaysComponents toDate:todayMidnight options:0];

        // Set the fire date and time zone
        notification.fireDate = fireDate;
        notification.timeZone = [NSTimeZone systemTimeZone];

        // Set the badge number
        NSDateComponents *fireDateComponents = [calendar components:NSDayCalendarUnit fromDate:fireDate];
        notification.applicationIconBadgeNumber = fireDateComponents.day;

        // We're done, add the notification to the array
        [localNotifications addObject:notification];
    }

    return [localNotifications copy];
}
于 2012-12-11T13:17:19.947 に答える