Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS,ObjC:在后台运行的服务_Ios_Objective C_Nstimer_Uilocalnotification - Fatal编程技术网

iOS,ObjC:在后台运行的服务

iOS,ObjC:在后台运行的服务,ios,objective-c,nstimer,uilocalnotification,Ios,Objective C,Nstimer,Uilocalnotification,我一直在构建一个流媒体应用程序,在那里我必须实现一个系统,该系统必须在午夜启动,在早上终止。我的问题是我不知道如何实现它 该系统必须在应用程序启动时保持监视,即使应用程序在后台运行,也必须继续运行 同时,我尝试实现一个计时器,它只运行了一段时间,并且在几次之后就消失了。我的应用程序不是VoiP或StandApp。正式地说,我没有运行无限服务的权利。无论如何,我需要一个解决方案,将调用一个方法在上午12点,它开始文件下载 //and create new timer with async call

我一直在构建一个流媒体应用程序,在那里我必须实现一个系统,该系统必须在午夜启动,在早上终止。我的问题是我不知道如何实现它

该系统必须在应用程序启动时保持监视,即使应用程序在后台运行,也必须继续运行

同时,我尝试实现一个计时器,它只运行了一段时间,并且在几次之后就消失了。我的应用程序不是VoiP或StandApp。正式地说,我没有运行无限服务的权利。无论如何,我需要一个解决方案,将调用一个方法在上午12点,它开始文件下载

//and create new timer with async call:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //run function methodRunAfterBackground
    NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(isNightFrame) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentRunLoop] run];
});
然后我尝试使用
UILocalnotifications
,但似乎必须有用户迭代。他必须接到通知


我需要一些建议,该走哪条路,如何把事情做好。先谢谢你

在非越狱设备上,无法实现您的目标。
如果您的应用程序未使用苹果提供的任何后台模式,则在应用程序被iOS暂停后,您将无法触发任何代码执行。
我猜您使用的是“应用程序播放音频”背景模式。即使启用此模式,如果您的应用程序未实际播放音频,应用程序也将暂停

TL;DR:如果没有用户在非越狱设备上的交互,就无法恢复暂停的应用程序

编辑:实际上,使用
后台提取
可以执行一些代码,但我非常确定,对于已挂起的应用程序,iOS永远不会允许您从
后台提取
启动音频会话

编辑2:根据,您不能选择触发
后台提取。iOS决定为您的应用程序触发它

应用程序执行后台提取的频率是 由系统决定。这取决于以下因素:

网络连接在该特定时间是否可用
设备是否处于唤醒状态
您的应用程序需要多少数据和时间 已接受以前执行后台提取的尝试
在里面 换句话说,您的应用程序完全取决于系统 为您安排后台提取。
此外,每次 应用程序使用后台获取,最多有30秒的时间 完成这个过程


在你的应用收到推送/本地通知后,iOS可以决定触发
后台提取。但是它绝对不可靠(比如说根本不可靠)。

谢谢您的回复。实际上,我需要启动的服务是文件下载。当我的应用程序处于后台时,如何在触发LocalNotification后提交后台提取?我需要实现哪个AppDelegate方法?对于本地通知,没有任何方法在通知触发时调用。应用程序永远不会知道何时触发本地通知。但一旦点击通知,应用程序将可以访问它。