【发布时间】:2015-07-26 03:00:27
【问题描述】:
我在从 firebase 数据库获取数据并将它们添加到数组时遇到问题。 getNewQuote 方法的打印输出显示数组为空,但屏幕截图显示标签已在 getNewQuote 方法。
这怎么会发生? 导致此问题的 getNewQuote 方法中的事件是否存在延迟? 此外,标签是如何使用 getNewQuote 方法的第 4 次迭代而不是最后一次迭代更新的。
提前谢谢你!
代码分解
在循环中迭代 5 次并执行以下操作:
1.创建一个随机数
2. 将随机数传入getNewQuote方法
(此方法从数据库中取回数据并附加到数组 quotesMessages)
循环迭代后,打印完整的数组
代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var message: UILabel!
var QuoteRef:String = "https://motivatr.firebaseIO.com/quotes"
var quotesMessages = [String]()
/* */
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
for (var i = 0; i < 5; i++) {
var currRandomNumber = self.createRandomNum()
self.getNewQuote(currRandomNumber)
}
println("viewDidLoad, array has \(quotesMessages.description)")
}//eom
/* */
override func viewWillAppear(animated: Bool) {
println("viewWillAppear, array has \(quotesMessages.description)")
}
/* */
override func viewDidAppear(animated: Bool) {
println("viewDidAppear, array has \(quotesMessages.description)")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/* creates a random number */
func createRandomNum()-> Int {
var randomNumberRange = UInt32(49)
var UnsignedRandomNum = arc4random_uniform(randomNumberRange)
var randomNum = Int(UnsignedRandomNum)
return randomNum
}
/* gets a new data from databases */
func getNewQuote(randomNum: Int){
println("random number \(randomNum) created")
//Temp var's
var quoteText = ""
var quoteAuthor = ""
var DBQuoteURL = "\(QuoteRef)/\(randomNum)"
var myRootRef = Firebase(url:DBQuoteURL)
myRootRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
if snapshot.value is NSNull {
// The value is null
}
else
{
if let quote = snapshot.value["quote"] as? String {
// println(quote)
quoteText = "'\(quote)'"
self.message.text = quoteText
self.quotesMessages.append(quoteText)
}
}
})
println("quote is: \(quoteText)")
}//eom
}//eoc
控制台输出:
random number 24 created
quote is:
random number 18 created
quote is:
random number 45 created
quote is:
random number 47 created
quote is:
random number 34 created
quote is:
viewDidLoad, array has []
viewWillAppear, array has []
viewDidAppear, array has []
【问题讨论】:
-
我的评论对您的问题有帮助吗?
-
是和不是。仍在学习如何处理这些类型的异步操作。不得不暂时搁置这个项目。再次感谢