«NSInvalidArgumentException», причина: «Недопустимое числовое значение (бесконечное) в записи JSON» - PullRequest
0 голосов
/ 01 мая 2019

Что я хочу сделать: позволить пользователю оценить магазин, а затем обновить значение storeRate в моей базе данных.

enter image description here

После того, как янажал POST, я получил ошибку:

'NSInvalidArgumentException', причина: 'Недопустимое значение числа (бесконечное) в записи JSON'

//Initialize Variables
var storeRateIni = 0.0
var reviewCount = 0.0
var receivedId = 1             //receive storeId from parent View Controller

refStore = Database.database().reference().child("stores")
refUpdate = Database.database().reference().child("stores").child(String(receivedId))

refStore.observe(DataEventType.value, with: {(snapshot) in
    if snapshot.childrenCount > 0{
        for store in snapshot.children.allObjects as! [DataSnapshot]{
            let storeObject = store.value as? [String: AnyObject]
            let storeId = storeObject?["storeId"] as! Int
            if (storeId == self.receivedId) {
                //Get value store in Firebase
                let storeRate = storeObject?["storeRate"] as! Double
                let storeReviewCount = storeObject?["storeReviewsCount"] as! Double
                //Do the calculation
                let storeRateUpdate = (storeRate + self.userRate.rating) / storeReviewCount
                //Update to Firebase
                self.reviewCount = storeReviewCount + 1
                self.storeRateIni = storeRateUpdate
                self.refUpdate.updateChildValues(["storeRate": self.storeRateIni])                     
                self.refUpdate.updateChildValues(["storeReviewsCount": self.reviewCount])                         
}}}})

1 Ответ

0 голосов
/ 01 мая 2019

Эта строка,

let storeRateUpdate = (storeRate + self.userRate.rating) / storeReviewCount

генерирует Double.inifinity при storeReviewCount == 0.0, что не представляется в JSON.

Возможно, вам придется обращаться с делом storeReviewCount == 0.0 отдельно от других дел.

Например:

let storeRateUpdate = storeReviewCount == 0.0
    ? 0.0
    : (storeRate + self.userRate.rating) / storeReviewCount
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...