Как правильно вызвать обработчик завершения фоновой выборки
В настоящее время я использую API (PowerAPI), в котором вызывается функция "authenticate", а затем после обработки данных пользователя отправляется уведомление. Эта функция аутентификации должна вызываться как фоновая выборка. Мой вопрос заключается в том, является ли мой текущий способ вызова обработчика завершения даже вызовом обработчика завершения, и если есть лучший способ?
В настоящее время это в моем классе делегата приложения:
let api = PowerAPI.sharedInstance
var completionHandler: ((UIBackgroundFetchResult) -> Void)? = nil
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
print("BG fetch start")
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleTranscript:", name:"transcript_parsed", object: nil)
self.completionHandler = completionHandler
api.authenticate("server.com", username: "User", password: "password", fetchTranscript: true)
}
func handleTranscript(notification : NSNotification){
print("BG fetch finit")
completionHandler!(UIBackgroundFetchResult.NewData)
print(api.studentInformation)
}
API является объектом синглтонного типа.
РЕДАКТИРОВАТЬ: PowerAPI объект является классом, который я написал, чтобы загрузить данные студентов с сервера и проанализировать их. Уведомление "transcript_parsed" - это уведомление, генерируемое из PowerAPI непосредственно после отправки уведомления "transcript_fetched" в следующем асинхронном коде (также в PowerAPI):
let task = session.dataTaskWithRequest(request) {
(let data, let response, let error) in
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error")
return
}
switch notificationID {
case "authentication_finished":
//NSString(data: data!, encoding: NSUTF8StringEncoding)! //used to return data from authentication
let success = self.parse(data!) //notification object is true if success
NSNotificationCenter.defaultCenter().postNotificationName(notificationID, object: success)
case "transcript_fetched":
NSNotificationCenter.defaultCenter().postNotificationName(notificationID, object: data)
default:
break
}
}