2016-09-08 5 views
4

firebaseからデータをダウンロードし、そのデータをtableViewに表示しています。しかし、私はいつもそれが私のtableViewに重複したコンテンツがあるように見えます。私は当初、誤って同じ内容を私のPostService.ps.posts配列に挿入したと思っていました。しかし、私はtableViewをリロードする直前にブレークポイントを置いた後、私はコンソールに次のコマンドを入力し、出力は奇妙です。Xcodeコンソールのデバッグ出力

印刷PostService.ps.posts以下の出力に示されるように

、項目[4]、項目[6] {...}私はいけない、それらが(この放置かを知るましたデバッグにコンソールコマンドを使用しているのは初めてです)。そして、私のtableViewで。 1、2、3、3、5、5、6、7、8、9の順で表示されます。行0〜行8)。つまり、行3(開始フォーム0)は行2と同じデータを取得し、行5は行4と同じデータを取得しているように見えます。

なぜこのようなことが起こっているのかわかりません。毎回発生しないため、どこから開始するのかわかりません。私は(私のviewForHeaderInSection内部[郵便] このコンソール出力が

[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内のデータに基づいて構成されている正しい方法に私を指して役立つだろう期待しています私は私があなたの質問を読んで、私はあなたが要素を印刷するために使用しているコマンドを理解するのに役立ちせ、これを使用しての代わりに、私のアプリで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

内容は異なる –

+0

@ Mr.UBどういう意味ですか? – user172902

+0

セクション – magid

答えて

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は参照型であるためです。

+0

の代わりにindexpath.sectionを試してみてください!私はポインタやメモリの問題のような奇妙なバグだと思った。私はXcodeがそれを印刷しないための正当な理由があるとは思っていません...どのように奇妙です。 – user172902

2

オーケーを設定するには、次のコードを持っていますPostService.ps.postsアレイ

poコマンドは、オブジェクトの「説明」メソッドを出力します。

viewForHeaderInSectionpo PostService.ps.posts[section]を書くようにしてください、そして、それはpostタイプのオブジェクトを印刷します。

次のようにここでは、postカスタムクラスオブジェクトのすべてのプロパティを印刷することができます: - 今po post.imageUrlpo post.postKeyを書き、po post.userId

クロスは、すべてのヘッダーのためにこれらの出力のすべてを確認してください。これらの値が同じか異なるか確認してください。これらの値が異なる場合、問題は表のセルをデキューすることになります。そうでない場合、これらの値が同じであれば、サーバーのロジック(バックエンド)に問題があります。

0

Xcodeを使用して私の個人的な経験からコンソールログは、コレクションオブジェクトを印刷する際に特に信頼できるものではなく、特定のアイテムをログに記録しようとしています。

関連する問題