Вы пишете данные в двух разных форматах.
Сначала в saveFriend
, вы пишете в этом формате:
"friends": {
"0": "uidOfTheUser",
"1": "uidOfAnotherUser"
}
Затем в increaseFriendshipValue
, выВы обновляете его как:
"friends": {
"uidOfTheUser": 1,
"uidOfAnotherUser": 0
}
Поскольку вы, похоже, действительно хотите вести подсчет на пользователя, я предполагаю, что последний является правильной структурой. Это означает, что вам нужно написать пользователя в этом формате и в saveFriend
.
Проблема, кажется, в:
var currentFriends = FUser.currentUser()!.friends
currentFriends.append(selectedFriend.objectId)
Здесь вы добавляете selectedFriend.objectId
кмассив, что означает, что Swift генерирует новый элемент массива: 0
и 1
в первом фрагменте JSON выше.
Что вы на самом деле захотите сделать, так это написать прямо в базу данных, подобночто вы делаете в increaseFriendshipValue
. Предполагая, что начальный счет равен 0
, это будет что-то вроде:
let friendsRef = firebase.child(kUSER).child(FUser.currentId()).child(kFRIEND)
let newFriendRef = child(selectedFriend.objectId)
newFriendRef.setValue(0)
Несколько замечаний:
- Вы действительно должны быть использование транзакции для увеличения значения друга, так как в противном случае записи от нескольких пользователей могут перезаписать результаты друг друга.
- В настоящее время
saveFriend
, по-видимому, имеет значительный риск перезаписи существующего значения для друга. Вы, вероятно, проверяете, есть ли у друзей уже дружественные отношения где-то в коде, но и здесь вы захотите использовать транзакцию. - Если вы используете транзакцию в обоих случаях, вы можете объединитькод для создания узла «друг» и код для его обновления в одну функцию, так как они будут выглядеть очень похоже.