Не имея каких-либо удачи, получая мой проект IOS для запроса моих игроков друзей рекордами:Firebase queryOrderedByChild queryEqualToValue не работает
private func checkFriendsScores(fbid: Int64)
{
let users = ref.child("users")
let fbidQuery = users.queryOrderedByChild("FBID")
let friendIdNumber = String(fbid)
let queryFriend = fbidQuery.queryEqualToValue(friendIdNumber)
queryFriend.observeSingleEventOfType(.Value) { [unowned self](snapshot: FIRDataSnapshot!) in
self.updateFriendsScores(fbid, data: snapshot)
}
}
Этот код компилируется и работает нормально, и другие части приложения работают. Запрос должен найти друга, у которого есть данный FBID, а затем запустить функцию updateFriendScores, но этот блок никогда не выполняется.
Данные выглядит следующим образом:
{
"users" : {
"WhiPPS6AbcX6Xp2XQft29JZXR9G3" : {
"BK035" : [ null, 540, 466, 515, 576, 748, 1019, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
"FBID" : 10208576492403564
},
"d0fT2ge6ALa6QUKFcRApiqjaJd82" : {
"BK018" : [ null, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646 ],
"BK035" : [ null, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
"FBID" : 1652501845074069
},
"o67iatcYLRbd2CrgkXGQWZNpmyC3" : {
"BK018" : [ null, 816, 715, 642, 690, 864, 745, 899, 858, 847, 1045, 1148, 1002, 1119, 833, 1067, 0, 0, 0, 0, 0 ],
"BK035" : [ null, 826, 620, 657, 673, 810, 1090, 804, 932, 931, 1079, 1007, 972, 1098, 1065, 927, 1582, 1195, 1265, 1366, 1548 ],
"FBID" : 1094051894000026
},
"yW5ntKW9pwYvwm2EyvJlGSTzm0M2" : {
"BK018" : [ null, 763, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
"BK035" : [ null, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
"FBID" : 10153916083832933
}
}
}
Любые идеи?
Int64, возможно, не лучший способ справиться с этим var. Существует два типа «вещи», доступные в Swift, * Any *, которые могут быть классом, stuct или enum или * AnyObject *, который специально предназначен для типов классов. queryEqualToValue ожидает AnyObject, а Int64 не соответствует AnyObject, так как это не класс, это тип значения. AnyObject может показаться, что удерживает Int, но те случаи, где за кулисами AnyObject неявно преобразует Int в __NSCFNumber.Таким образом, это должно быть либо String, либо преобразовать в Int с: let num = Int (fbid), а затем: fbidQuery.queryEqualToValue (num) – Jay
@Jay благодарит Джей. Просто отредактировал ответ, учитывая ваши мысли. – adolfosrs