ios - 创建框架时如何访问 AppDelegate 方法 handleEventsForBackgroundURLSession

标签 ios swift

我正在创建一个框架并使用 AWS 在后台上传数据。

我需要在项目 AppDelegate 中调用的方法中包含代码,

func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
    AWSS3TransferUtility.interceptApplication(application, handleEventsForBackgroundURLSession: identifier, completionHandler: completionHandler)
}

我目前的解决方案是在 AppDelegate 中调用我的框架时调用我的框架,但我不希望用户必须包含启动框架运行的代码以外的任何代码。无论如何,是否可以使用我框架中的所有参数调用我的代码行,而不需要有人在我的框架中调用方法?

最佳答案

经过一番思考,我认为没有办法做到这一点。

据我所知,有两种不同的方法可以实现您正在寻找的方法,一种是您当前正在使用的方法,另一种是创建您自己的继承 UIApplicationDelegate

的 AppDelegate 类

1.- 从 App delegate 调用您的方法,就像您正在做的那样,您很清楚这种方法的缺点是您依赖于开发人员来实现该方法,并且知道在 App Delegate 中的何处实现它.


2.- 创建一个 AppDelegate 基类,您需要告诉开发人员从您的类继承他们的应用委托(delegate)。

class CustomAppDelegate: UIResponder,UIApplicationDelegate {
    func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
        AWSS3TransferUtility.interceptApplication(application, handleEventsForBackgroundURLSession: identifier, completionHandler: completionHandler)
    }
}

他们的 AppDelegate 将从它继承:

class AppDelegate: CustomAppDelegate{

}

问题是开发人员可能并不总是遵循此准则,即使他们这样做了,如果他们需要重写该函数,他们也需要调用 super 方法调用才能使其工作。

希望这对您有所帮助!

关于ios - 创建框架时如何访问 AppDelegate 方法 handleEventsForBackgroundURLSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48590077/

相关文章:

ios - 如何使用 swift 在 Xcode 中制作自定义按钮?

php - Laravel 5 HTTP 响应、M4V 文件和 iOS MPMoviePlayerViewController

ios - 当存在带有物理体的 SkSpriteNode 时,TouchesMoved() 滞后非常不一致

ios - drawRect : 中不同颜色的不同行为

ios - 按定义的顺序从 Firebase 加载信息

ios - 带有字符串的 NSPredicate 似乎没有返回结果

swift - 在 Swift 中以编程方式更改导航栏项目

ios - 是否可以使用迦太基分发二进制 ios 框架

iOS - 水平 UIStackView 中控件的顶部和底部边距

IOS - 从 Ipod 访问音频流、暂停和更改音量