【问题标题】:iPhone iOS do apps running in backgrounds generate and process notifications?iPhone iOS 在后台运行的应用程序会生成和处理通知吗?
【发布时间】:2012-05-02 15:12:59
【问题描述】:

当应用进入后台模式时,我的应用正在下载 JSON 对象。该应用程序将它们转换为核心数据实体。我遇到的问题是我需要将这些核心数据实体的托管对象上下文与主托管对象上下文合并。

合并这些更改的方法是通过通知:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextHasChanged:) name:NSManagedObjectContextDidSaveNotification object:nil];


- (void)contextHasChanged:(NSNotification*)notification
{

    NSLog(@"received notification with object: %@",[[notification object] description]);
    if ([notification object] == [AppUser managedObjectContext]) return;

    if (![NSThread isMainThread]) {
        [self performSelectorOnMainThread:@selector(contextHasChanged:) withObject:notification waitUntilDone:YES];
        return;
    }

    [[AppUser managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}

由于某种原因,我的代码在后台运行时没有收到这些通知。 应用程序在后台模式下运行时是否会继续生成通知? 还是因为我注册此类通知的位置/时间有误?

感谢您的澄清!

【问题讨论】:

    标签: iphone objective-c ios core-data nsmanagedobjectcontext


    【解决方案1】:

    应用继续在主或后台发送通知。你需要照顾 在添加观察者和发布通知期间不应释放观察者。我认为在实施中可能存在一些错误阅读此

    https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html

    【讨论】:

    • 谢谢,我已经确认我的代码可以在后台模式下继续处理基于通知的代码! (我找到了一个可以为我做这件事的课程)。
    【解决方案2】:

    按下主页按钮后,您的应用会进入暂停模式。在您通过点击其图标“唤醒”它之前,它不会处理上述通知。

    为确保您的应用继续执行其任务,您需要请求后台任务完成。然后,操作系统将给您最多 600 秒(10 分钟)的时间来完成您的应用程序正在执行的任何任务,然后再将其挂起。

    您可以在此处阅读更多信息:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW3

    具体来说,在上面的链接中查找“后台执行和多任务处理”。

    【讨论】:

      【解决方案3】:

      您在后台可以接收的通知类型存在限制。此外,通知的发送是您在进入后台之前安排好的。

      如果您需要在应用进入后台时继续工作,您也应该调用 beginBackgroundTaskWithExpirationHandler。

      主要文档在这里:

      http://developer.apple.com/library/ios/ipad/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

      向下滚动到后台执行和多任务处理部分

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多