从 UICollectionViewCell 转为失败?

Posted

技术标签:

【中文标题】从 UICollectionViewCell 转为失败?【英文标题】:Segue from UICollectionViewCell failing? 【发布时间】:2014-12-24 16:15:59 【问题描述】:

我有一个UICollectionView

class BoatMatchingGame: UICollectionViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource 

我也有一个不同的ViewController 的课程,我正在尝试继续:

class GameOutcome: UIViewController 
    @IBOutlet var gameOutcomeLabel: UILabel!
    var boatMatchingGame: BoatMatchingGame!

    override func viewDidLoad() 
        super.viewDidLoad()
        gameOutcomeLabel.text = gameOutcomeText
    

BoatMatchingGame 类中,我有prepareForSegue 方法:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    let gameOutcome = segue.destinationViewController as GameOutcome
    gameOutcome.boatMatchingGame = self;

didSelectItemAtIndexPath方法中,我要执行segue

switch indexPath.item 
    case 14:
        self.performSegueWithIdentifier("Quit Matching Game", sender: self)

我在情节提要中设置了标识符"Quit Matching Game"。当我运行程序并在indexPath 14 处选择cell 时,出现以下错误:Thread 1: EXC_BREAKPOINT (code=EXC_1386_BPT, subcode=0x0) on this line in a thread: 0x202ebd8: popl %ebp

注意:我确实有一个标签在这个单元格中每秒都在变化。

谢谢!

这是整个线程:

libswiftCore.dylib`swift_dynamicCastClassUnconditional:
0x2080ba0:  pushl  %ebp
0x2080ba1:  movl   %esp, %ebp
0x2080ba3:  movl   0x8(%ebp), %eax
0x2080ba6:  testl  %eax, %eax
0x2080ba8:  je     0x2080bbb                 ; swift_dynamicCastClassUnconditional + 27
0x2080baa:  movl   0xc(%ebp), %ecx
0x2080bad:  movl   (%eax), %edx
0x2080baf:  nop    
0x2080bb0:  cmpl   %ecx, %edx
0x2080bb2:  je     0x2080bd8                 ; swift_dynamicCastClassUnconditional + 56
0x2080bb4:  movl   0x4(%edx), %edx
0x2080bb7:  testl  %edx, %edx
0x2080bb9:  jne    0x2080bb0                 ; swift_dynamicCastClassUnconditional + 16
0x2080bbb:  calll  0x2080bc0                 ; swift_dynamicCastClassUnconditional + 32
0x2080bc0:  popl   %eax
0x2080bc1:  leal   0x38262(%eax), %ecx
0x2080bc7:  movl   0x7748c(%eax), %eax
0x2080bcd:  movl   %ecx, 0x8(%eax)
0x2080bd0:  movl   $0x0, 0xc(%eax)
0x2080bd7:  int3   
0x2080bd8:  popl   %ebp
0x2080bd9:  retl   
0x2080bda:  nopw   (%eax,%eax)

【问题讨论】:

@vacawama 我将 segue 从 BoatMatchingGame ViewController 拖到情节提要中的 GameOutcome ViewController。 【参考方案1】:

您似乎还没有真正声明或初始化您在GameOutcomeviewDidLoad 中使用的gameOutcomeText 变量。

如果您在BoatMatchingGame 类中设置gameOutcomeText,则可以使用传递给GameOutcome 视图控制器的BoatMatchingGame 实例来访问它,如下所示:

override func viewDidLoad() 
    super.viewDidLoad()
    gameOutcomeLabel.text = boatMatchingGame.gameOutcomeText

【讨论】:

对不起;我忘了提到gameOutcomeText 存储为public var。我尝试将它移到类中并使用此方法,但仍然出现相同的错误。

以上是关于从 UICollectionViewCell 转为失败?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UICollectionViewCell 呈现 AlertView

从 uiviewcontroller 操作 uicollectionviewcell 内的 uicollectionview

为啥我的 UICollectionViewCell 没有从 UICollectionViewController 获取数据?

从 XIB 加载时 UICollectionViewCell 导致崩溃

如何从 UICollectionView 中弹出一个 uicollectionViewCell?

从笔尖创建的 UICollectionViewCell 中的奇怪 UIView