我正在创建一个框架并使用 AWS 在后台上传数据。
我需要在项目 AppDelegate 中调用的方法中包含代码,
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
AWSS3TransferUtility.interceptApplication(application, handleEventsForBackgroundURLSession: identifier, completionHandler: completionHandler)
}
我目前的解决方案是在 AppDelegate 中调用我的框架时调用我的框架,但我不希望用户必须包含启动框架运行的代码以外的任何代码。无论如何,是否可以使用我框架中的所有参数调用我的代码行,而不需要有人在我的框架中调用方法?
最佳答案
经过一番思考,我认为没有办法做到这一点。
据我所知,有两种不同的方法可以实现您正在寻找的方法,一种是您当前正在使用的方法,另一种是创建您自己的继承 UIApplicationDelegate
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/