var reloadtable:Bool = false { dIDSet { if reloadtable { dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value),0)) { // 1 dispatch_async(dispatch_get_main_queue()) { // 2 self.tableVIEw.reloadData() // 3 } } } } } func arrayContains(array:[[String:AnyObject]]) { for song in array { // async function with completion block({ self.reloadtable = true }) } reloadtable = false }
问题是tableVIEw在for循环的每次迭代后重新加载.我希望只有在阵列中迭代完所有歌曲后才会调用它.原因是,我在UItableVIEw中异步获取歌曲的专辑封面,但是他们正在按顺序下载.所以我需要将它们附加到特定索引处的数组,然后重新加载表视图.有什么建议?
解决方法 GCD’s dispatch group可用于此目的.func arrayContains(array:[[String:AnyObject]]) { var downloadGroup = dispatch_group_create() for song in array { dispatch_group_enter(downloadGroup) // async function with completion block({ dispatch_group_leave(downloadGroup) }) } dispatch_group_notify(downloadGroup,dispatch_get_main_queue()) { self.reloadtable = true //Take care of cyclic reference here. } }}总结
以上是内存溢出为你收集整理的ios – 如何在for-in循环后触发观察者ONCE?全部内容,希望文章能够帮你解决ios – 如何在for-in循环后触发观察者ONCE?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)