2016-10-01 76 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。 –