【问题标题】:Fire a method ever 24 hours每 24 小时触发一个方法
【发布时间】:2011-08-28 05:25:11
【问题描述】:

我正在尝试每天在给定时间触发一次方法。我已经尝试了一些东西,但我无法真正让它发挥作用。任何意见,将不胜感激。此外,无论应用程序是否打开,它都会触发,这将是理想的。这可能吗?

【问题讨论】:

    标签: iphone objective-c ios ios4 iphone-sdk-3.0


    【解决方案1】:

    UILocalNotification 将让您在您的应用程序在后台运行时触发通知(但不是方法),或者如果应用程序在前台运行,将调用您实现的委托方法(application:didReceiveLocalNotification:),或者在用户响应警报时调用您必须实现的方法 (application:didFinishLaunchingWithOptions:)。除此之外,当应用程序不在前台时,您将无法调用方法,您将只能触发通知(可以显示徽章、播放声音等)。

    顺便说一句,如果这是您想要的功能,请考虑向苹果提交错误报告。我希望能够根据本地通知在后台运行方法,而无需等待用户首先响应。

    查看 Apple 的示例代码:

    - (void)scheduleNotificationWithItem:(ToDoItem *)item interval:(int)minutesBefore {
        NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
        NSDateComponents *dateComps = [[NSDateComponents alloc] init];
        [dateComps setDay:item.day];
        [dateComps setMonth:item.month];
        [dateComps setYear:item.year];
        [dateComps setHour:item.hour];
        [dateComps setMinute:item.minute];
        NSDate *itemDate = [calendar dateFromComponents:dateComps];
        [dateComps release];
    
        UILocalNotification *localNotif = [[UILocalNotification alloc] init];
        if (localNotif == nil)
            return;
        localNotif.fireDate = [itemDate addTimeInterval:-(minutesBefore*60)];
        localNotif.timeZone = [NSTimeZone defaultTimeZone];
    
        localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"%@ in %i minutes.", nil),
             item.eventName, minutesBefore];
        localNotif.alertAction = NSLocalizedString(@"View Details", nil);
    
        localNotif.soundName = UILocalNotificationDefaultSoundName;
        localNotif.applicationIconBadgeNumber = 1;
    
        NSDictionary *infoDict = [NSDictionary dictionaryWithObject:item.eventName forKey:ToDoItemKey];
        localNotif.userInfo = infoDict;
    
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
        [localNotif release];
    }
    

    【讨论】:

    • 如果应用程序处于活动状态,您的 application:didReceiveLocalNotification: (如果有的话) 将触发。
    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 2012-02-13
    • 2021-07-26
    • 1970-01-01
    • 2013-10-03
    • 2010-10-05
    • 2010-12-14
    • 2021-07-24
    相关资源
    最近更新 更多