【发布时间】:2019-07-21 12:07:45
【问题描述】:
我正在尝试从 firebase 读取数据并根据 firebase 中的数据绘制矩形。颜色也会根据从 firebase 检索到的值进行填充。我设法从 firebase 检索数据并将它们附加到数组中。
由于 Firebase 是异步的,我添加了完成处理程序,以便仅在 readMarina() 完成后运行以下代码。我正在尝试通过输入一个矩形框的简单绘图来测试 draw() 方法中的 readMarina{}。一切顺利,直到context?.fill(lot),它给出了一个错误:
“线程 1:EXC_BAD_ACCESS(代码=1,地址=0x7ffe00000058)”
override func draw(_ rect: CGRect)
{
let context = UIGraphicsGetCurrentContext()
let lot = CGRect(x: 80,y: 20,width: 30,height: 60)
readMarina{
context?.addRect(lot)
context?.setFillColor(UIColor.red.cgColor)
context?.fill(lot)
}
}
func readMarina (_ completion: (() -> Void)?){
let ref = Database.database().reference()
let cpDB = ref.child("CarPark")
cpDB.child("MarinaSq").observe(.value, with: {snapshot in
let snapshotValue = snapshot.value as! Dictionary<String, AnyObject>
for (key, value) in snapshotValue
{
if (self.lot.count)<((snapshotValue.count)){
let v = value as! String
let k = key
self.lot.append(k)
self.status.append(v)
}
}
completion?()
})
}
我尝试调试,当我将鼠标悬停在“上下文”和“上下文?”上时,它们都显示了一个值。当我将鼠标悬停在“很多”上时,也解析了值。我的代码有什么问题,为什么我的矩形框没有出现在我的视图上?
【问题讨论】:
-
不要尝试使
drawRect异步。在observe的完成处理程序中调用setNeedsDisplay -
嗨! :) 您可以在示例代码中向我展示吗?因为我对 swift 很陌生,我不太明白如何在observe 的完成处理程序中调用 setNeedsDisplay。很抱歉给您添麻烦了!
-
有理由在 draw(_ rect: CGRect) 中调用 readMarina 吗?
-
@Konstantin 我想在这个视图控制器加载时从 firebase 读取数据并将它们附加到数组中
标签: swift firebase swift4 core-graphics xcode10