2016-04-06 28 views
4

kullanıcı adıyla mevcut olup olmadığını kontrol etme Kullanıcıların oyuna başlamalarına ve kullanıcı adlarını arayarak diğer kullanıcıları takip etmelerine izin vermeye çalışıyorum. Bu kullanıcı adına sahip bir kullanıcının var olduğundan emin olmalıyım. Aşağıdaki kodu kullanıyordum ama if çağrılsa da else olması gerektiği zaman çağrılmıyor.Swift & Firebase | Bir kullanıcının

let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
      .observeEventType(.ChildAdded, withBlock: { snapshot in 

    if snapshot.value.valueForKey("username")! as! String == username! { 

    } else { 

    } 

JSON veri ağaç

{ 
    "097ca4a4-563f-4867ghj0-6209288bd7f02" : { 
     "email" : "[email protected]", 
     "uid" : "097ca4a4-563f-4867ghj0-6209288bd7f02", 
     "username" : "test1", 
     "waiting" : "0" 
    }, 
    "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7" : { 
     "email" : "[email protected]", 
     "uid" : "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7", 
     "username" : "test2", 
     "waiting" : "0" 
    } 
} 
+0

"ama başka denir istediğim zaman çağrılmadığı takdirde rağmen" Ne burada demek? – Khuong

+0

@ khuong291 Yani if ​​ifadesi "etkin": yani snapshot.value.valueForKey ("kullanıcı adı") ise! gibi! Dize == kullanıcı adı! {'Ama başka bir ifadede bile, hiçbir zaman bir şey yapmaz. –

+0

Doğru, çünkü ifade doğruysa, o zaman başka bir ifade asla çalıştırılmaz. – Khuong

cevap

6

Kolay düzeltme: Sorgu şey bulamazsa ne zaman

çalıştırmaz bloğu olarak .childAdded kullanmayın.

yerine .Value kullanabilir ve NSNull

kontrol
let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
    checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
       .observeEventType(.Value, withBlock: { snapshot in 

      if (snapshot.value is NSNull) { 
       print("not found)") 

      } else { 
       print(snapshot.value) 
      } 
    } 
+0

Bu yaklaşımı test ettim, ancak geri çağırma işlevi birkaç kez çağrılıyor. Yani çıkış bölümünde "bulunamadı" ve sonra anlık görüntü değeri ... sadece bir sonucu nasıl alacağınızdan emin değilsiniz. – franswa

+0

Hatalı bir şey daha var. .value düğümün tüm içeriğini okur, böylece olmaz düğümü değiştirmiyorsanız, birden çok kez çağrılmalıdır. Ayrıca, SingleEventOfType'ı da gözlemleyebilirsiniz. – Jay

+0

Evet, yanlış bir şey yapmalıydım ... Dün akşam uğraştığımı harcadım dün, ugh, ama şimdi de çalışıyormuş gibi çalışıyor gibi görünüyorsun – franswa

İlgili konular