2016-10-01 77 views
0

我正在製作一個應用程序(我的第一個,哇!),我得到一個錯誤,我似乎無法修復時,我加載表視圖。奇怪的UITableView錯誤

我有一個初始的ViewController工作得很好。我有一個按鈕指向一個UITableView的導航控制器。我的UITableView子類的tableView:numberOfRowsInSection覆蓋似乎有問題。

這裏是代碼建立表:

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

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

當我加載表視圖的場景我在App代表獲得「signalSIGABRT」的錯誤。

該錯誤似乎是在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 

當我點擊「繼續」它實際上沒有進展,這看起來很奇怪。

無論如何,我希望有人有一個想法來幫助。

這裏有一些背景信息,可能會或可能不會流失任何光線: 我原本寫這個應用程序的大部分,然後通過XCode8更新到Swift 3.我不知道這有什麼影響,不幸的是我忘記是否我在Swift 3或之前編寫了應用程序的這一部分(這是造成問題)。 我從Kevin McNeisch的「非程序員的iOS應用程序開發」系列書中學到了代碼,此前我的主要業務控制器已在此應用程序中作爲他的mmBusinessObject的子類。但Swift 3打破了mmBusinessObject,所以我將它們更改爲NSManagedObjects,它一切正常。我的意思是,到目前爲止我還沒有訪問任何實體表格;這個問題似乎與應用程序的這些部分沒有任何關係,但我想我會包含信息。

謝謝! Jonathan

編輯: 顯然我是這樣一個n00b,我甚至不知道如何回覆評論! (我點擊「添加評論」,它將我帶到頁面頂部,但頁面上沒有任何改變)

感謝您的評論。作爲迴應:

關於的cellForRowAtIndexPath: 隨着numberOfSections和numberOfRowsInSection和的cellForRowAtIndexPath,我得到的錯誤 用的cellForRowAtIndexPath註釋掉(和積極的另外兩個),我得到的錯誤。 隨着numberOfRowsInSection註釋掉(另兩個活動),我得到一個空表。

關於代表/數據源: 我的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就像我附加的圖像。檢查你的故事板。防爆。表視圖 - >表視圖細胞

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。 –