我确定我错过了一些明显的东西。
使用解析服务器我想将请求中的一些数据填充到字典中。
query.findObjectsInBackgroundWithBlock { (books, error) in
guard (books != nil) else {
print(error)
return
}
for book in books! {
print("\n\n\(book)") //#1 Got some book
if let coverString = book["cover"] {
print("coverString OK : \(coverString)") //#2 got a valid String
self.bookImages.append(coverString as? String)
} else {
print("coverString nil")
self.bookImages.append(nil)
}
}
}
如果我:print("Tableau image: \(bookImages)\n")
我的var bookImages = [String?]()
中没有任何内容,即使我在coverString
#2内有内容。
但如果我.append(“foobar”)在其他任何地方(尝试),除了在闭包中我的字典不是空的。
为什么这个奇怪的魔法?
答案 0 :(得分:1)
findObjectsInBackgroundWithBlock
是一个异步操作。
因此,您的数组(.append
适用于数组,而不是字典)可能已正确填充,但是当它未填充尚未时,您正在查看它。
如果您将print
语句放在闭包中,您会看到结果。
你还应该在那里重新加载TableView,但是将它重新分配到主线程。
示例:
query.findObjectsInBackgroundWithBlock { (books, error) in
guard (books != nil) else {
print(error)
return
}
for book in books! {
if let coverString = book["cover"] {
print("coverString OK : \(coverString)")
self.bookImages.append(coverString as? String)
} else {
print("coverString nil")
self.bookImages.append(nil)
}
if let titleString = book["title"] {
print("titleString OK : \(titleString)")
self.bookTitle.append(titleString as? String)
} else {
print("titleString nil")
self.bookTitle.append("No Title")
}
}
print("Tableau image2: \(self.bookImages)\n")
print("Tableau title2: \(self.bookTitle)\n")
dispatch_async(dispatch_get_main_queue()) {
self.collectionView?.reloadData()
}
}