json - 'NSInvalidArgumentException',原因:'JSON 写入中的无效数值(无限)'
问题描述
我想做的是:让用户对商店进行评分,然后更新storeRate
我的 Firebase 中的值。
单击 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])
}}}})
解决方案
这条线,
let storeRateUpdate = (storeRate + self.userRate.rating) / storeReviewCount
生成Double.inifinity
when storeReviewCount == 0.0
,在 JSON 中无法表示。
您可能需要将案件storeReviewCount == 0.0
与其他案件分开处理。
例如:
let storeRateUpdate = storeReviewCount == 0.0
? 0.0
: (storeRate + self.userRate.rating) / storeReviewCount
推荐阅读
- javascript - 为什么这个函数会影响 JS 范围之外的非全局变量?
- excel - VBA宏:根据条件选择工作表并删除行
- laravel - Laravel 形式在 foreach 循环中被剥离
- javascript - Jquery 日期选择器动态 minDate -issue
- php - 如何从输入框中获取存储过程的参数
- c# - 删除单元格边框后不可读的 Word 文档 (OpenXml.Wordprocessing)
- javascript - 单击图像后尝试使自动播放工作
- nattable - CustomLineBorderDecorator 列之间的连续线
- linux - Linux_如何使用命令行在 Firefox 中为特定站点启用 cookie
- windows - 管理员组中的用户无法以管理员身份启动应用程序