在我的故事板中,我有一个嵌入在NavigationContoller中的ViewController,带有UIButtons和可拖动/可点击的UIViews。可拖动的视图从parse.com获取。在我的文本版本中,一切正常:
query!.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error != nil {
println("DB Error: \(error)")
} else {
// Get data
let fetchProducts:[Product] = objects as! [Product]
self.products = fetchProducts
self.loadCards()
}
}
然后我扩展了这个代码,并且也可以从parse.com获取图片。我可以看到图像,但我的UIButtons不再可点击了。 NavigationController中的BarButtonItem可以工作,甚至可拖动的视图也是可移动和可点击的。我真的不明白为什么按钮坏了。我在扩展代码中看不到任何相关的UIButton代码可能会影响到这一点:
query!.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error != nil {
println("DB Error: \(error)")
} else {
// Get data
let fetchProducts:[Product] = objects as! [Product]
// TODO: Fetching Images!!!
let maxFetch = fetchProducts.count
var maxFetchCounter = 0
for fetchProduct in fetchProducts {
let userImageFile = fetchProduct.image as PFFile
userImageFile.getDataInBackgroundWithBlock {
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
maxFetchCounter++
if let imageData = imageData {
let image = UIImage(data:imageData)
fetchProduct.productImage = image
self.products.append(fetchProduct)
}
if maxFetchCounter == maxFetch {
self.loadCards()
}
}
}
}
}
}
我已经两天就这个问题挣扎了。我希望有人可以提供帮助。提前谢谢。
[编辑:4月21日] 我发现了另一个奇怪的事情 - 如果我在一个额外的函数中排除代码,那么UIButton再次工作。但是如果我经常在很短的时间内发射这个功能,那么所有的图像都不会存在。
query!.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error != nil {
println("DB Error: \(error)")
} else {
// Get data
let fetchProducts:[Product] = objects as! [Product]
self.products = fetchProducts
self.updateImageFromParse()
}
}
和ne函数
func updateImageFromParse() {
let maxFetch = self.products.count
var maxFetchCounter = 0
println("Get Images")
for fetchProduct in self.products {
let userImageFile = fetchProduct.image as PFFile
userImageFile.getDataInBackgroundWithBlock {
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
maxFetchCounter++
println("Count: \(maxFetchCounter)/\(maxFetch)")
if let imageData = imageData {
let image = UIImage(data:imageData)
fetchProduct.productImage = image
} else {
println("ERROR: NO PICTURE !!!!!")
}
if maxFetchCounter == maxFetch {
self.loadCards()
}
}
}
}
}
如果我在函数中排除代码,我甚至不知道为什么UIButtons正在工作:/