iOS:UI(UIButtons)在使用.getDataInBackgroundWithBlock后中断

时间:2015-04-20 20:57:04

标签: ios user-interface swift parse-platform

在我的故事板中,我有一个嵌入在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正在工作:/

0 个答案:

没有答案