使用Swift崩溃的iOS应用程序仅提供(lldb)作为输出

时间:2014-07-24 12:25:47

标签: cocoa-touch swift lldb xcode6

首先,对不起,如果我在这里投入太多:我已经将我认为可以使用的所有内容都放在帖子中。

我正在编写一个试图在Table View单元格中呈现水平集合视图的应用程序。当没有显示Collection View单元格时,即我在该函数中返回0表示单元格数量,一切正常。

但是当我尝试显示一个单元格时,代码崩溃时输出中除(lldb)之外没有错误消息,EXC_BREAKPOINT(code=EXC_I386_BPT, subcode=0x0)0x2d5372: movl %esi, %eax上以绿色突出显示。

单击该应用程序继续然后再次崩溃,每个需要显示的单元格具有相同的症状,即每次调用...cellForItemAtIndexPath...函数时。

我的单元格代码是:

class homeWhatsOnCellectionCell: UICollectionViewCell {
    @IBOutlet var filmTitle: UILabel!
    @IBOutlet var filmPoster: UIImageView!
}

对于集合视图是:

class homeTableViewController: UITableViewController, UICollectionViewDelegate, UICollectionViewDataSource {
    @IBOutlet var onThisWeekCollectionView: UICollectionView!
    ...
    override func viewDidLoad() {
        onThisWeekCollectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Home Whats On Collection View Cell")
    }

    func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int {
        return 1
    }

    func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {
        var cell: homeWhatsOnCellectionCell = collectionView.dequeueReusableCellWithReuseIdentifier("Home Whats On Collection View Cell", forIndexPath: indexPath) as homeWhatsOnCellectionCell
        cell.filmTitle.text = "The Hunger Games: Catching Fire"
        cell.filmPoster.image = UIImage(named: "The Hunger Games.jpg")
        return cell
}

    func numberOfSectionsInCollectionView(collectionView: UICollectionView!) -> Int {
        return 1
}

最后,在最终无法解释的崩溃上单击“继续”,再次崩溃,并显示一条我无法弄清楚的错误消息。如果你能解释这个,也可以获得奖励。我可以理解错误代码,它意味着什么,但不是什么导致它或如何解决它:

错误代码:

2014-07-24 13:19:27.237 Films 2[22583:364445] -[UICollectionViewCell filmTitle]: unrecognized selector sent to instance 0x7a185600
2014-07-24 13:19:27.240 Films 2[22583:364445] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICollectionViewCell filmTitle]: unrecognized selector sent to instance 0x7a185600'
*** First throw call stack:
(
    0   CoreFoundation                      0x0058d646 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x01f058bf objc_exception_throw + 44
    2   CoreFoundation                      0x00594fb5 -[NSObject(NSObject) doesNotRecognizeSelector:] + 277
    3   CoreFoundation                      0x004de617 ___forwarding___ + 1047
    4   CoreFoundation                      0x004de1de _CF_forwarding_prep_0 + 14
    5   Films 2                             0x00100954 _TFC21Films_223homeTableViewController14collectionViewfS0_FTGSQCSo16UICollectionView_22cellForItemAtIndexPathGSQCSo11NSIndexPath__GSQCSo20UICollectionViewCell_ + 980
    6   Films 2                             0x00100e55 _TToFC21Films_223homeTableViewController14collectionViewfS0_FTGSQCSo16UICollectionView_22cellForItemAtIndexPathGSQCSo11NSIndexPath__GSQCSo20UICollectionViewCell_ + 101
    7   UIKit                               0x0149747d -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 258
    8   UIKit                               0x01499312 -[UICollectionView _updateVisibleCellsNow:] + 4928
    9   UIKit                               0x0149d7bf -[UICollectionView layoutSubviews] + 263
    10  UIKit                               0x00e1fcf9 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 600
    11  libobjc.A.dylib                     0x01f18771 -[NSObject performSelector:withObject:] + 70
    12  QuartzCore                          0x04655f0f -[CALayer layoutSublayers] + 152
    13  QuartzCore                          0x04649d95 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 397
    14  QuartzCore                          0x04649bf0 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26
    15  QuartzCore                          0x045a925e _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 284
    16  QuartzCore                          0x045aa624 _ZN2CA11Transaction6commitEv + 392
    17  QuartzCore                          0x0466f1b9 +[CATransaction flush] + 52
    18  UIKit                               0x00d92e36 -[UIApplication _reportMainSceneUpdateFinished:] + 39
    19  UIKit                               0x00d93d2b -[UIApplication _runWithMainScene:transitionContext:completion:] + 3027
    20  UIKit                               0x00dac3bb __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke + 59
    21  UIKit                               0x00d923c1 -[UIApplication workspaceDidEndTransaction:] + 155
    22  FrontBoardServices                  0x035c405e __37-[FBSWorkspace clientEndTransaction:]_block_invoke_2 + 71
    23  FrontBoardServices                  0x035c3ca4 __40-[FBSWorkspace _performDelegateCallOut:]_block_invoke + 54
    24  FrontBoardServices                  0x035d56e5 __31-[FBSSerialQueue performAsync:]_block_invoke + 26
    25  CoreFoundation                      0x004b1450 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 16
    26  CoreFoundation                      0x004a66f3 __CFRunLoopDoBlocks + 195
    27  CoreFoundation                      0x004a654b __CFRunLoopRun + 2715
    28  CoreFoundation                      0x004a57eb CFRunLoopRunSpecific + 443
    29  CoreFoundation                      0x004a561b CFRunLoopRunInMode + 123
    30  UIKit                               0x00d91dd0 -[UIApplication _run] + 571
    31  UIKit                               0x00d953d6 UIApplicationMain + 1526
    32  Films 2                             0x00102841 top_level_code + 97
    33  Films 2                             0x0010287b main + 43
    34  libdyld.dylib                       0x02458ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

当它崩溃时,会突出显示cell.filmTitle.text = "The Hunger Games: Catching Fire" 行,并且我已检查所有插座是否按原样连接,并且据我所知,所有插件应连接正常。

1 个答案:

答案 0 :(得分:4)

您正在注册错误的类以供重用。你正在使用它。

onThisWeekCollectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Home Whats On Collection View Cell")

何时应该使用子类。

onThisWeekCollectionView.registerClass(homeWhatsOnCellectionCell.self, forCellWithReuseIdentifier: "Home Whats On Collection View Cell")

这让我抓住了你错误中有意义的部分。

  

- [UICollectionViewCell filmTitle]:无法识别的选择器发送到实例

意味着沿着这条线的某个地方,你试图在UICollectionViewCell的一个实例上调用filmTitle方法,并且该实例没有响应选择器,这导致了崩溃。在这种情况下,即使您在cellForRowAtIndexPath中进行了向下转换,用于重用的类仍然是您的单元格超类,它不会响应您的子类添加的任何方法/属性。

注意:根据标准命名约定,您的类应以大写字母开头。