从 Swift 到 Objective C 后台升级的翻译数据任务功能

Posted

技术标签:

【中文标题】从 Swift 到 Objective C 后台升级的翻译数据任务功能【英文标题】:Translate data task function for background upgrade from Swift to Objective C 【发布时间】:2021-07-06 09:05:34 【问题描述】:

我正在尝试在 AppDelegate.m 中实现一个函数,以便在后台更新我的应用。

我在网上找到了一篇文章(这是链接:https://medium.com/@vialyx/ios-dev-course-background-modes-fetch-70c18f9f58d5),但它是用 Swift 编写的,我无法将它从 Swift 转换为 Objective C 这部分代码:

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) 
    // Create url which from we will get fresh data
    if let url = URL(string: "https://www.vialyx.com") 
        // Send request
        URLSession.shared.dataTask(with: url, completionHandler:  (data, response, error) in
            // Check Data
            guard let `data` = data else  completionHandler(.failed); return 
            // Get result from data
            let result = String(data: data, encoding: .utf8)
            // Print result into console
            print("performFetchWithCompletionHandler result: \(String(describing: result))")
            // Call background fetch completion with .newData result
            completionHandler(.newData)
        ).resume()
    

谁能帮助我?谢谢。

【问题讨论】:

【参考方案1】:

你可以试试

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
// Create url which from we will get fresh data
NSURL*url = [[NSURL alloc] initWithString:@"https://www.vialyx.com"];
[[NSURLSession sharedSession ] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) 
    if (data != nil) 
        NSString* result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        // Print result into console
        NSLog(@"performFetchWithCompletionHandler result: %@",result);
        completionHandler(UIBackgroundFetchResultNewData);
    
    else 
        completionHandler(UIBackgroundFetchResultFailed); 
     
  ];

【讨论】:

可以在后台下载使用吗? @Sh_Khan 谢谢,除了 NSLog 行外一切正常。可能你忘了在冒号后面插入 %@。 好吧,我不知道。这就是为什么问。谢谢:)

以上是关于从 Swift 到 Objective C 后台升级的翻译数据任务功能的主要内容,如果未能解决你的问题,请参考以下文章

使用 PromiseKit 从 Objective C 到 Swift 的桥接

《程序员》杂志精选:从Objective-C到Swift

如何将回调对象从 Swift 传递到 Objective C 类并用作回调?

从 Swift 调用 Objective C 和 C 传递回调函数

将单例从 Objective C 共享到 Swift

从服务器 Objective C 或 Swift 下载文件