2015-04-20 2 views
3

У меня есть функция для получения данных с помощью json, и я добавляю все данные в массив. Я пытаюсь создать семафор и дождаться отправки сигнала на семафор, чтобы продолжить, но он не работает (я не уверен, что я делаю это правильно или нет), затем я увидел вопрос в Stackoverflow, ответ был создан обработчик завершения как этоДождитесь окончания функции Swift

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) { 
    getUrunGrup(completionHandler) 
} 

так я изменил мою функцию как то

func getUrunGrup(completionHandler: ((UIBackgroundFetchResult) -> Void)!){ 
    Alamofire.request(.GET, "http://213.136.86.160:27701/Thunder/DataService/GetUrunGrup") 
     .responseJSON {(request, response, jsonObj, error) in 
      if let jsonresult:NSDictionary = jsonObj as? NSDictionary{ 
       if let result: AnyObject = jsonresult["Result"] { 
        let elementCount = result.count 
        for (var i = 0; i<elementCount; ++i){ 
         if let name: AnyObject = result[i]["Adi"]!{ 
          if let kod:AnyObject = result[i]["Kod"]!{ 
           urunUstGrup.append(["Adi": "\(name)", "Kod": "\(kod)"]) 
           println("getUrunGrup \(i)") 


           } 
          } 
         } 
        } 
       } 

      } 
    completionHandler(UIBackgroundFetchResult.NewData) 
    println("Background Fetch Complete") 

    } 

но не там нет ответа для того, как я должен вызвать эту функцию?

ответ

2

вы должны передать ваши функции асинхронной обработчик для вызова в дальнейшем, как это:

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) { 
    loadShows(completionHandler) 
} 

func loadShows(completionHandler: ((UIBackgroundFetchResult) -> Void)!) { 
    //.... 
    //DO IT 
    //.... 

    completionHandler(UIBackgroundFetchResult.NewData) 
    println("Background Fetch Complete") 
} 

OR (уборщик способ ИМХО)

добавить промежуточный completionHandler

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) { 
    loadShows() { 
     completionHandler(UIBackgroundFetchResult.NewData) 
     println("Background Fetch Complete") 
    } 
} 

func loadShows(completionHandler: (() -> Void)!) { 
    //.... 
    //DO IT 
    //.... 
    completionHandler() 
} 
+0

здесь является полный ответ: http: //stackoverflow.com/questions/24725059/wait-for-asynchronous-operation-to-complete-in-swift. кредитов: http: //stackoverflow.com/users/420303/daij-djan –

+0

, но как я могу назвать свою функцию, я знаю этот ответ, никто не говорит, как вызвать вашу функцию в вашей программе. –

+0

вызов getUrunGrup не поможет? –

Смежные вопросы