2016-10-01 8 views
0

私はアプリを作っています(私の最初の、うわー!)、私はちょうどときに修正することができない、テーブルビューを読み込むエラーを取得しています。奇妙なUITableViewのエラー

私は最初のViewControllerがうまく動作します。私は、ナビゲーションコントローラがUITableViewを指し示しているボタンを持っています。私のUITableViewサブクラスのtableView:numberOfRowsInSectionオーバーライドに問題があるようです。私はアプリケーションデリゲートに「signalSIGABRT」エラーを取得するテーブルビューのシーンをロードすると

override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 2 
} 

はここで表を設定するコードです。

エラーはnumberOfRowsInSectionメソッドにあるように見えます。なぜなら、コメントアウトするとエラーは表示されず、空のテーブルが取得されるだけです。

デバッグでは、そのメソッドの "return 2"行にブレークポイントを設定し、クラッシュすることなくブレークポイントで停止します。私は本当にそこから進んでいない:これらのような行を完全に、私は「ステップオーバー」ヒット、それは私は間違いなく理解することは、このすべてにあまりにも新たなんだ画面に私をもたらします:

UIKit`-[UITableView _numberOfRowsInSection:]: 
    0x10641a23e <+0>: pushq %rbp 
    0x10641a23f <+1>: movq %rsp, %rbp 
    0x10641a242 <+4>: pushq %r15 
    0x10641a244 <+6>: pushq %r14 
    0x10641a246 <+8>: pushq %r12 
    0x10641a248 <+10>: pushq %rbx 
    0x10641a249 <+11>: movq %rdx, %r14 
    0x10641a24c <+14>: movq %rdi, %r15 
    0x10641a24f <+17>: movq 0x101d2e2(%rip), %rdi  ; UITableView._dataSource 
    0x10641a256 <+24>: addq %r15, %rdi 
    0x10641a259 <+27>: callq 0x106eca892    ; symbol stub for: objc_loadWeakRetained 
    0x10641a25e <+32>: movq %rax, %r12 
    0x10641a261 <+35>: movq 0xfe3300(%rip), %rsi  ; "tableView:numberOfRowsInSection:" 
    0x10641a268 <+42>: movq %r12, %rdi 
    0x10641a26b <+45>: movq %r15, %rdx 
    0x10641a26e <+48>: movq %r14, %rcx 
    0x10641a271 <+51>: callq *0xd0afe1(%rip)   ; (void *)0x00000001044f7ac0: objc_msgSend 
-> 0x10641a277 <+57>: movq %rax, %rbx 
    0x10641a27a <+60>: movq %r12, %rdi 
    0x10641a27d <+63>: callq *0xd0afdd(%rip)   ; (void *)0x00000001044f4d20: objc_release 
    0x10641a283 <+69>: xorl %eax, %eax 
    0x10641a285 <+71>: testq %rbx, %rbx 
    0x10641a288 <+74>: cmovsq %rax, %rbx 
    0x10641a28c <+78>: movq %rbx, %rax 
    0x10641a28f <+81>: popq %rbx 
    0x10641a290 <+82>: popq %r12 
    0x10641a292 <+84>: popq %r14 
    0x10641a294 <+86>: popq %r15 
    0x10641a296 <+88>: popq %rbp 
    0x10641a297 <+89>: retq 

そして、私は "Continue"を押すと実際には進まないが、これは奇妙に思える。

とにかく、誰かが助けてくれるといいと思っています。

光を当ててもしなくてもよい背景情報があります: XCode8からSwift 3にアップデートする前に、このアプリのほとんどを書いていました。これにはどのような影響があったのかは分かりません。私はSwift 3以前でこの問題を引き起こしているアプリのこの部分を書きました。 私はKevin McNeischの「非プログラマー向けのiOSアプリケーション開発」ブックシリーズからコードを学びました。以前はこのアプリケーションの主なビジネスコントローラーをmmBusinessObjectのサブクラスとして使用していました。しかしSwift 3はmmBusinessObjectを破ったので、それらをNSManagedObjectsに変更しました。つまり、私はこれまでどんなエンティティテーブルにもアクセスしていませんでした。この問題はアプリのそれらの部分とは関係ないように見えますが、とにかく情報を含めると考えました。

ありがとうございます! ジョナサン

EDIT: どうやら私はコメントに返信する方法を理解できないようですね。 (私は「コメントを追加」を押すと、ページの上部に移動しますが、ページ上で何も変わっていません)

ありがとうございます。 cellForRowAtIndexPathについて

:対応して numberOfSectionsでは、とnumberOfRowsInSection、およびcellForRowAtIndexPath、私はコメントアウトcellForRowAtIndexPath(およびアクティブな他の2つが)、私はエラーを取得して、エラー を取得します。 numberOfRowsInSectionがコメントアウトされていて(他の2つがアクティブになっています)、空のテーブルが表示されます。

デリゲート/データソースについて: ここで私のViewControllerはUITableViewControllerのサブクラスです。データソースまたはデリゲートプロトコル用に設定しようとすると、冗長となります。ストーリーボードビューでは、テーブルビューのデリゲートとデータソースは両方ともテーブルビューの名前である「ブラウズソング」に設定されています。シーンの上部にある黄色のアイコンを選択すると、データソースとデリゲートが両方とも「テーブルビュー」として表示されます。これらは自動的に発生しました(つまり私はそれを自分でやったことはありませんでした、ただそこにいました)、私はそれが何であると思いますか?

ViewControllerについて:私はこの問題を現在のものと考えていますか?以下にコードを示します。これは、ナビゲーションコントローラから作成されたテーブルビューにリンクされていることに注意してください。また、(オブジェクトライブラリから)単にテーブルビューとして作成すると、セクション/行メソッドは正常に機能しますが、レイアウトの問題が発生し、ナビゲーションが必要になります。

import UIKit 

class SongListViewController2: UITableViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 2 
    } 

// override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
//  return 2 
// } 

    // Error seems to be caused by numberOfRowsInSection method 


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) 

     // Configure the cell... 
     cell.textLabel?.text = "Hello world" 
     return cell 
    } 
+0

呼び出されますcellForRowAtIndexPathていますか? – danh

+0

コントローラの表示に関する詳細をお知らせください。いくつかのコードですか? –

+0

デリゲートとデータソースを接続しましたか? – nighttalker

答えて

0

私はあなたが私が添付された画像のようなあなたのテーブルビューセルにIdentifierを設定しなかったと思います。あなたのストーリーボードをチェックしてください。 Ex。テーブルビュー - >テーブルビューのセル

enter image description here

+0

それはうまくいった!ありがとうございました!エラーは他の場所にあるように見えたのでそれは謎のビットでしたが、それはそれでした! –

+0

@JonathanTuzman:チェックマークをクリックすると、回答を受け入れることができることに注意してください。 http://stackoverflow.com/help/someone-answersおよびhttp://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-workを参照してください。 –