2016-04-13 33 views
2

Öğreticiye göre arka plan getirme kullanarak hızlı 2.0 kullanarak sorun yaşıyorum ->https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial3. Bu hatayı alıyorum: uygulama: performFetchWithCompletionHandler: ancak tamamlama işleyicisi hiç çağrılmadı.IOS Firebase arka plan getirme

Temel olarak, eylemlerimi gerçekleştirdiğim (firebase verileri çağıran) bir işlevim var ve arka planda çalışmasını istiyorum.

func interface() { 

       self.numeroDasOrações = [] 
       self.adhan = [] 

       if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] { 

        for snap in snapshots { 
         if let postDictionary = snap.value as? Dictionary<String, AnyObject> { 
          let key = snap.key 
          let hSalat = Horarios(key: key, dictionary: postDictionary) 
          let hAdhan = Horarios(key: key, dictionary: postDictionary) 

          self.numeroDasOrações.append(hSalat) 
          self.adhan.append(hAdhan) 

         } 
        } 
       } 
      }) 
} 

Xcode hata:

Uyarı: Uygulama temsilci alınan çağrı İşte

burada
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(
    UIApplicationBackgroundFetchIntervalMinimum) 
} 


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

    if let tabBarController = window?.rootViewController as? UITabBarController, 
     viewControllers = tabBarController.viewControllers! as [UIViewController]! 
    { 
     for viewController in viewControllers { 

      if let a1 = viewController as? HorariosViewController { 
       completionHandler(.NewData) 
       a1.interface() 
      } 
     } 
    } 
} 

i arayüz fonksiyonu üzerine Firebase veri almak nasıl benim app temsilci kodudur -Uygulama: performFetchWithCompletionHandler: ancak tamamlama işleyici hiç çağrılmadı.

Şimdiden teşekkürler.

+0

kodunuzu göstermek Lütfen ... ve ben sadece sorumu düzenlenmiş –

+0

kishan94 @ XCode dan tam hata/uyarı mesajı ...:

Böylece (Swift 3 için güncellenmiş) son kod olacak . –

+0

Bence completionHandler çağrısı completeionHandler olmalıdır (UIBackgroundFetchResult.NewData) – Jay

cevap

1

application(_:didReceiveRemoteNotification:)'u kullanırken, ne olursa olsun, her zaman tamamlama işleyicisini aramalısınız. Elkitabı, getirinizin yeni bir veri bulamadıysanumaralı telefonu çağırdıysanız, getiriniz yeni bir veri bulamadıysave getiriniz yeni veriler bulsaydı completionHandler(.failed), ancak geri almaya çalışırken başarısız oldu.

Kodunuzda, tamamlama işleyicisi yalnızca belirli koşullar karşılandığında çağrılır. Tamamlama işleyicisini çağırmamak yerine, completionHandler(.failed) veya completionHandler(.noData) numaralı telefonu aramanız gerekir.

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
    var newData = false 
    if let tabBarController = window?.rootViewController as? UITabBarController, 
     viewControllers = tabBarController.viewControllers! as [UIViewController]! 
    { 
     for viewController in viewControllers { 
      if let a1 = viewController as? HorariosViewController { 
       newData = true 
       a1.interface() 
      } 
     } 
    } 
    completionHandler(newData ? .newData : .failed) // OR completionHandler(newData ? .newData : .noData) 
} 
İlgili konular