iPhone应用程序崩溃本地通知

时间:2010-09-16 09:31:35

标签: iphone ios4 ios notifications

这是怪异的。我的应用程序会在将其发送到后台时安排本地通知,并且在第一个通知正确显示时,只要在此之后应该触发,整个应用程序就会崩溃。是的,在后台。虽然没有执行任何代码。

没有给出控制台输出,我只是在iPhone模拟器中得到一个“模拟应用程序退出”的对话框。在实际的iPhone上,我会被扔回跳板。

以下是通知的相关代码。谢谢你的帮助。

- (void)scheduleLocalNotificationsForAlarmsWithNextAlarmAt:(NSDate *)theFireDate ofType:(int)workPlayType {  

    BOOL backgroundSupported = NO;
    UIDevice* device = [UIDevice currentDevice];
    if ([device respondsToSelector:@selector(isMultitaskingSupported)])
        backgroundSupported = device.multitaskingSupported;
    if(!backgroundSupported) return;

    int work_minutes = [[NSUserDefaults standardUserDefaults] integerForKey:@"work_minutes_preference"];
    int play_minutes = [[NSUserDefaults standardUserDefaults] integerForKey:@"play_minutes_preference"];

    int workPlayStatusForNotif = workPlayType;

    UILocalNotification *localNotif = [[UILocalNotification alloc] init];
    if (localNotif == nil)
        return;

    if (workPlayStatusForNotif == 1) {
        localNotif.alertBody = @"Work";
        localNotif.repeatInterval = work_minutes;
    } else {
        localNotif.alertBody = @"Play";
        localNotif.repeatInterval = play_minutes;
    }

    localNotif.fireDate = theFireDate;
    localNotif.timeZone = [NSTimeZone defaultTimeZone];

    localNotif.alertAction = NSLocalizedString(@"View Details", nil);

    localNotif.soundName = @"ding.caf";
    localNotif.applicationIconBadgeNumber = 0;

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
    [localNotif release];

    // now the other one
    localNotif = [[UILocalNotification alloc] init];

    if (localNotif == nil)
        return;

    if (workPlayStatusForNotif == 0) {
        localNotif.alertBody = @"Work";
        localNotif.fireDate = [theFireDate dateByAddingTimeInterval:(float)work_minutes*60];
        localNotif.repeatInterval = work_minutes;
    } else {
        localNotif.alertBody = @"Play";
        localNotif.fireDate = [theFireDate dateByAddingTimeInterval:(float)play_minutes*60];
        localNotif.repeatInterval = play_minutes;
    }
    localNotif.timeZone = [NSTimeZone defaultTimeZone];

    localNotif.alertAction = NSLocalizedString(@"View Details", nil);

    localNotif.soundName = @"ding.caf";
    localNotif.applicationIconBadgeNumber = 0;

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
    [localNotif release];
}

3 个答案:

答案 0 :(得分:1)

这似乎是一个iOS 4.1错误。我的应用程序曾经与4.0一起使用时遇到了类似的问题。还有其他人在苹果开发者论坛上报告了类似的问题。等待苹果的回应。

问候,

答案 1 :(得分:1)

您正在测试哪台设备?你在哪里检查设备是否是iPhone3G?这个代码不会在Iphone3g上运行,即使它在iOS4上,因为iPhone3G不支持多任务处理。 其余的代码看起来还不错。

答案 2 :(得分:1)

是这是一个iOS 4.1问题,我也遇到了同样的问题“模拟器崩溃”,但我也遇到了另一个问题: 如果我们在后台发起多个Local-Notification,那么它也会崩溃iPhone iOS:S

我无法找到执行多个本地通知的任何解决方法。 Apple Development团队必须深入验证Local-Notification。