ios - 在异步调用中索引到数组时出现问题,Swift

标签 ios arrays swift

我正在尝试创建一个“匹配”对象图像的 ScrollView ,它与我的 View Controller 中的“匹配”对象数组相关联,这样如果我点击 ScrollView 中的“匹配”图像,我可以在我的 miniMatchesContainer 中获取该图像的索引,并使用它来访问我的数组中该图像对应的 Match 对象。我尝试用 for 循环解决它,但问题是因为我从服务器异步获取匹配图像,调用无序返回,所以我的 containerView 索引关闭(我添加了我的图像控制台的 print statemen 来显示我的意思)。所以现在我陷入了僵局,希望得到一些关于从这里去哪里的建议。我应该改变我的方法吗?有什么我想念的吗?下面添加了代码。

//function to create contentScrollView for MiniMyatches
func setupMiniContentScroll(contentScroll: UIScrollView) {
    let scalar:Double = 4/19
    let contentViewDimension = contentScroll.frame.width * CGFloat(scalar)
    let contentScrollWidth = CGFloat(LocalUser.matches.count) * (contentViewDimension + CGFloat(12)) - CGFloat(12)
    let matchManager = MatchesManager()

    for index in 0..<LocalUser.matches.count {
        let match = LocalUser.matches[index]
        print("Match index: \(index), Match at Index: \(match.itemName)")
        matchManager.retrieveMatchThumbnail(match) { img, error in

            if let img = img {

                //create the mini matches views
                let xOrigin = index == 0 ? 12 : CGFloat(index) * contentViewDimension + (CGFloat(12) * CGFloat(index) + CGFloat(12))
                let contentFrame = CGRectMake(xOrigin, 10, contentViewDimension, contentViewDimension)
                let contentView = self.makeMiniContentView(contentFrame, image: img, matchedPrice: match.matchedPrice)

                let tap = UITapGestureRecognizer(target: self, action: #selector(BrowseViewController.toggleItemInfo(_:)))
                contentView.addGestureRecognizer(tap)
                self.miniMatchContainer.append(contentView)
                print("MiniMatchContainer Index: \(self.miniMatchContainer.indexOf(contentView)), Match at Index: \(match.itemName)")

                //update the contentScrollView
                dispatch_async(dispatch_get_main_queue()) {

                    let contentLabelFrame = CGRect(x: xOrigin, y: contentFrame.height + 15, width: contentFrame.width, height: 20)
                    let contentLabel = self.makeMiniContentLabel(contentLabelFrame, itemName: match.itemName)
                    let priceLabel = self.makeMiniPriceLabel(contentFrame, matchedPrice: match.matchedPrice)

                    contentScroll.addSubview(contentView)
                    contentScroll.addSubview(contentLabel)
                    contentScroll.addSubview(priceLabel)
                    contentScroll.contentSize = CGSizeMake(contentScrollWidth + CGFloat(16), contentScroll.frame.height)
                }
            }

        }
    }
}

enter image description here

最佳答案

我会尝试:

print("MiniMatchContainer Index: \(index), Match at Index: \(match.itemName)")

代替:

print("MiniMatchContainer Index: \(self.miniMatchContainer.indexOf(contentView)), Match at Index: \(match.itemName)")

我会在 retrieveMatchThumbnail 外部创建内容 View ,并在内部更新它。

关于ios - 在异步调用中索引到数组时出现问题,Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38402970/

相关文章:

ios - UIGestureRecognizer 只为 subView 添加,但它也适用于 parentView?

ios - CoreData 中的数据验证问题

ios - 未在 Tableview 中调用 didSelectRowAtIndexPath 方法

ios - iOS游戏开始时的输入延迟

objective-c - 当 NSString 的长度减少时,内存会被释放吗?还是我必须做更多的事情?

arrays - 来自一维数组的唯一值,无需迭代

c - 动态字符数组

swift - 如何保存单选按钮的状态?

ios - 什么 NSDateFormat 是 1991-07-26T05 :45:50. 163

c++ - constexpr 静态结构类成员的冲突声明