我从firebase下载数据并将数据显示到tableView上。但是,我发现我的tableView中偶尔会出现重复的内容。我最初认为我不小心在PostService.ps.posts数组中插入了相同的内容。但是,在我重新加载tableView之前设置了一个断点之后,我在控制台中键入了以下命令,输出很奇怪。
打印PostService.ps.posts
如下面的输出所示,item [4]和item [6]有{...},我不知道它们代表什么(这是我第一次使用console命令进行调试)。在我的tableView中。我看到的数据按以下顺序显示[1],[2],[3],[3],[5],[5],[6],[7],[8],[9](对于第0行到第8行)。所以看起来第3行(从0开始)获得与第2行相同的数据,第5行获得与第4行相同的数据。很奇怪?
我不确定为什么会发生这种情况,我无从何处开始,因为每次都不会发生这种情况。我希望这个控制台输出能帮助我指出正确的方法
[1] = 0x000000012f4849b0 {
_postKey = "-KQTh_WDO2IS1rYfLgnU"
_userId = "SpmZmYwD3Td04sQZxOYeALwuMp03"
}
[2] = 0x0000000130e61f40 {
_postKey = "-KQTHnE4IIeBR3tyDM3r"
_userId = "1isMS98ZmXYrpCmGb4o5voaAqXH2"
_image = "www.image2.com"
}
[3] = 0x0000000130192b40 {
_postKey = "-KQtN4YG51HOF19FrM8s"
_userId = "SpmZmYwD3Td04sQZxOYeALwuMp03"
_image = "www.image3.com"
}
[4] = 0x0000000130192b40 {...}
[5] = 0x0000000130269560 {
_postKey = "-KR2On6u7dRy0GAvE1Gn"
_userId = "SpmZmYwD3Td04sQZxOYeALwuMp03"
_image = "www.image4.com"
}
[6] = 0x0000000130269560 {...}
[7] = 0x000000013150f4c0 {
_postKey = "-KQThGLVA-MsviGMsXOS"
_userId = "1isMS98ZmXYrpCmGb4o5voaAqXH2"
_image = "www.image5.com"
}
[8] = 0x000000012fa88890 {
_postKey = "-KQt269uHGM99oFKuJRt"
_userId = "SpmZmYwD3Td04sQZxOYeALwuMp03"
_image = "www.image6.com"
}
[9] = 0x000000012f9bcad0 {
_postKey = "-KQThdCAm-PlCsCnXcBZ"
_userId = "SpmZmYwD3Td04sQZxOYeALwuMp03"
}
我的所有表数据都是根据PostService.ps.posts中的数据配置的,这些数据的类型为[Post] 在我的viewForHeaderInSection(我在我的应用程序中使用此而不是cellForRowAtIndexPath)中,我有以下代码来配置表
if let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("TableSectionHeader") as? TableSectionHeader {
let post = PostService.ps.posts[section]
var image: UIImage?
if let url = post.imageUrl {
image = DiscoverVC.imageCache.objectForKey(url) as? UIImage
}
cell.configureCell(post, image: image)
cell.delegate = self
return cell
} else {
return TableSectionHeader()
}
答案 0 :(得分:2)
好的,我已阅读您的问题并让我帮助您了解用于打印PostService.ps.posts
数组元素的命令。
po
命令打印对象"描述"方法
尝试在po PostService.ps.posts[section]
内写viewForHeaderInSection
,然后打印post
类型对象。
您可以在此处打印post
自定义类对象的所有属性,如下所示: -
现在写po post.imageUrl
,
po post.postKey
,po post.userId
交叉检查所有标题的所有输出。检查这些值是相同还是不同。如果这些值不同,则问题在于将表格单元格出列,否则如果这些值相同,则问题将出现在服务器逻辑(后端)中。
答案 1 :(得分:1)
最后,我逐渐了解了某些元素将描述显示为 {...} 的原因。这是由于重复的参考对象打印。在控制台实际对象中让我们看到内容,但重复对象只显示 {...} 。在您的情况下,您有[3]和[4]元素,[5]和[6]元素具有相同的引用,因此重复的元素显示 {...} 。为此,我尝试了一个简单的例子。希望它会对此有所清晰。
import UIKit
class ViewController: UIViewController {
class model {
let first = "first"
let second = "second"
}
override func viewDidLoad() {
super.viewDidLoad()
var array = [model]()
let obj = model()
let obj1 = model()
array.append(obj) // original objct
array.append(obj) // duplicate because classes are referece types
array.append(obj) // duplicate because classes are referece types
array.append(obj1) // new Object
print(array)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
输出:
(lldb) print array
([SampleDebugApp.ViewController.model]) $R0 = 4 values {
[0] = 0x00007fed8ac93990 (first = "first", second = "second")
[1] = 0x00007fed8ac93990 {...}
[2] = 0x00007fed8ac93990 {...}
[3] = 0x00007fed8ac939d0 (first = "first", second = "second")
}
(lldb)
注意:它只发生在类对象的数组上。因为class是引用类型。
答案 2 :(得分:0)
根据我多年来使用Xcode的个人经验,控制台日志在打印出收集对象方面并不是非常可靠,只是尝试记录您怀疑的具体项目,看看从那里发生的事情;