iOS背景提取和完成块

时间:2015-03-12 05:03:13

标签: ios objective-c objective-c-blocks appdelegate

我正在尝试定义此方法

- (void)backgroundFetchWithCompletion:(void(^)(UIBackgroundFetchResult))completionHandler;

但是我在UIBackgroundFetchResult上收到错误,说只允许没有类型的参数列表,我正在按照本教程和tutorial进行操作,这就是他们定义方法的方法。

3 个答案:

答案 0 :(得分:3)

在最后执行某些操作后,您必须在列表中调用一个。

目标-C

  1. completionHandler(UIBackgroundFetchResultNewData);
  2. completionHandler(UIBackgroundFetchResultFailed);
  3. completionHandler(UIBackgroundFetchResultNoData);
  4. 夫特

    1. completionHandler(.NewData)
    2. completionHandler(.Failed)
    3. completionHandler(.NoData)
    4. 完整示例:

      目标-C

      - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
      {
        NSLog(@"performFetchWithCompletionHandler");
        //Perform some operation
        completionHandler(UIBackgroundFetchResultNewData);
      }
      

      夫特

      func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
        println("performFetchWithCompletionHandler")
        //Perform some operation
        completionHandler(.NewData)
      }
      

答案 1 :(得分:1)

[编辑]这是我的一个较老的答案,请参考AbdullahDiaa的答案,以获得更好/更正确的解决方案。

我刚遇到同样的问题,解决方案是将此添加到定义了该块的方法的文件中:

#import "AppDelegate.h"

答案 2 :(得分:1)

只需确保在头文件中导入UIKit.h:

#import <UIKit/UIKit.h>