相关疑难解决方法(0)

如何在iOS中运行已经运行的任务使用beginBackgroundTaskWithExpirationHandler

在我的应用程序中,我将图像从iPhone上传到服务器.如果用户按下主页按钮同步,App将关闭.

我希望应用程序必须在后台运行,直到同步完成.

我的问题是:如何用" beginBackgroundTaskWithExpirationHandler" 添加当前正在运行的任务?

请分享您的想法.

iphone background-process ios

38
推荐指数
4
解决办法
4万
查看次数

使用Beacon Ranging更新WatchKit应用程序

我正在创建一个基于Swift的iOS应用程序,它结合了iBeacons,为WatchKit(OS 1)应用程序提供数据.应用程序根据信标CLProximity是否设置为.Near或将数据从JSON加载到tableView中.Immediate.iOS应用程序启动后,能够无问题地检测信标,填充变量,并使其可用于WatchKit应用程序.但是,当WatchKit应用程序尝试使用application:handleWatchKitExtensionRequestiOS尚未首先启动时从应用程序请求信标数据时,信标的对象将返回nil.我的假设是,当手机上的应用程序关闭时,打开父应用程序的WatchKit调用不会触发存储在AppDelegate中的信标范围代码.将信标初始化代码移动到application:handleWatchKitExtensionRequest该问题中并不能解决问题.

如何构建应用程序(一般来说,我知道足够的代码,我不一定需要逐行细分,但如果您认为它可以帮助其他人,您可以自由地执行此操作)其中:

  1. 应用用户启动观看应用以检查附近的数据.
  2. 手表应用程序从iOS应用程序请求近/立即信标列表.
  3. iOS应用程序返回符号信标的列表符合此条件的信标的主要字符串.
  4. 最理想的是,iOS应用程序让Watch App知道该列表何时更改以及WatchKit应用程序更新.

我有一种感觉,我的解决方案的一部分在于DarwinNotification和注册观察者,这不是我以前曾经用过很多东西的东西,但是在StackOverflow上有足够的例子我可以实现它们,如果是这样的话.我想真正的问题是如何在尚未启动iOS应用程序时收集信标数据.

ios swift

12
推荐指数
1
解决办法
221
查看次数

在didReceiveRemoteNotification中进行异步下载

我的应用程序配置为支持静默推送(内容可用),并且还支持后台提取.想要实现是在接收静默推送时,我需要向服务器发送ajax请求,获取数据并保存(使用CoreData保存).

当然,如果没有用户打开应用程序,所有这些都会发生.当他打开应用程序时,会有新的数据等待.这是无声的回拨:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

    // Use Alamofire to make an ajax call:
    //...
    let mutableURLRequest = NSMutableURLRequest(URL: URL)
    let requestBodyData : NSMutableData = NSMutableData()

    mutableURLRequest.HTTPBody = body
    mutableURLRequest.HTTPMethod = "POST"
    mutableURLRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
    mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")

    request(mutableURLRequest)
        .responseJSON { (req, res, data, error) in

            //We do not reach this code block !

            // Save the incoming data to CoreData
            completionHandler(UIBackgroundFetchResult.NewData)
    } …
Run Code Online (Sandbox Code Playgroud)

ajax apple-push-notifications ios swift alamofire

10
推荐指数
1
解决办法
1996
查看次数

一旦App进入后台,AVAssetWriter就会失败

我在iOS应用程序上工作,我正在从图像创建视频.我AVAssetWriter用来实现这一目标.一切正常.但当应用程序进入后台并切换回来时,视频写入失败.AVAssetWriterfinishWritingWithCompletionHandler当我切换回应用程序是没有得到调用.

当应用程序在渲染期间进入背景时,可能是AVAssetWriter的副本失败,但我没有得到任何帮助.

对此有何看法?

谢谢

iphone objective-c ios avassetwriter

8
推荐指数
1
解决办法
1379
查看次数

应用程序最小化后我们可以调用该方法吗?

iOS版

应用程序最小化后我们可以调用该方法吗?

例如,被叫5秒后applicationDidEnterBackground:.

我使用此代码,但test方法不调用

- (void)test
{
    printf("Test called!");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self performSelector:@selector(test) withObject:nil afterDelay:5.0];
}
Run Code Online (Sandbox Code Playgroud)

iphone cocoa objective-c ios

7
推荐指数
1
解决办法
1451
查看次数

无法启动beginBackgroundTask swift 3

抱歉,我被卡住了,但是我正在尝试启动后台任务(XCode8,迅速3)

来自此处的示例: https : //developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW3

在AppDelegate.swift中:

func applicationDidEnterBackground(_ application: UIApplication) {
    var bgTask: UIBackgroundTaskIdentifier = 0;
    bgTask = application.beginBackgroundTask(withName:"MyBackgroundTask", expirationHandler: {() -> Void in
        print("The task has started")
        application.endBackgroundTask(bgTask)
        bgTask = UIBackgroundTaskInvalid
    })
}
Run Code Online (Sandbox Code Playgroud)

该应用程序从未显示“任务已开始”消息。我究竟做错了什么?

ios swift background-task

5
推荐指数
2
解决办法
4692
查看次数

IOs7应用程序在后台崩溃

我的应用程序有时会在后台崩溃并显示以下崩溃日志:

Nov  7 12:33:31 iPad backboardd[29] <Warning>: MyApp[3096] has active assertions beyond permitted time: 
    {(
        <BKProcessAssertion: 0x14680c60> identifier: Called by MyApp, from -[AppDelegate applicationDidEnterBackground:] process: MyApp[3096] permittedBackgroundDuration: 180.000000 reason: finishTask owner pid:3096 preventSuspend  preventIdleSleep  preventSuspendOnSleep 
    )}
Run Code Online (Sandbox Code Playgroud)

通过其他问题我发现崩溃消息表明我没有正确结束任务,所以当它的时间到期时,操作系统结束了它并使我的应用程序崩溃.

所以我添加了一些NSLog:

- (void)applicationDidEnterBackground:(UIApplication *)application
{       
    [self saveContext];
    [Settings setCallLock:YES];

    [self saveStuff];

    if ([self isBackgroundTaskNeeded]) 
    {

        UIApplication*  app = [UIApplication sharedApplication];

        bgTask = [app beginBackgroundTaskWithExpirationHandler:^{

            [self pauseDownloads];

            NSLog(@"Debug - Ending background task %d",bgTask);
            [app endBackgroundTask:bgTask];
            NSLog(@"Debug -  Background task %d ended",bgTask);
            bgTask …
Run Code Online (Sandbox Code Playgroud)

crash ios ios7

3
推荐指数
1
解决办法
6227
查看次数