Как правильно вызвать обработчик завершения фоновой выборки

В настоящее время я использую 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
        }
    }

0 ответов

Другие вопросы по тегам