2015-02-07 1 views
3

По какой-то причине я получаю эту ошибку, когда достигается строка performSegueWithIdentifier.Swift: exc_breakpoint (код = exc_arm_breakpoint subcode = 0xdefe) on prepareForSegue

У меня есть этот код:

if let storedAPIKeychain: AnyObject = dictionary.objectForKey("api_key") { 

      println(storedAPIKeychain) 

      //This is the line that causes the problems. 
      performSegueWithIdentifier("skipBrandSegue", sender: self) 

     } 

Println() работает отлично, и выводит правильную информацию.

Я пытаюсь передать storedAPIKeychain вместе с Segue:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if segue.identifier == "skipBrandSegue" { 

     // Create a new variable to store the instance of the next view controller 
     let destinationVC = segue.destinationViewController as brandsViewController 
     destinationVC.storedAPIKey = storedAPIKeychain! 

    } 
} 

который я думал, что, возможно, было проблемой. однако, когда я сменил эту строку на:

destinationVC.storedAPIKey = "someAPIplaceholder" 

Я также получаю ту же ошибку.

Может кто-нибудь, пожалуйста, сообщите мне, что это за ошибка и как ее решить. Благодарю.

Edit: Скриншот ошибки: Xcode DebugError

ответ

4

Динамический класс литой безусловная указывает на то, что вынужденный бросок потерпел неудачу, потому что переменная не может быть приведен к другому типу.

В своем коде я вижу один бросок только на этой линии:

let destinationVC = segue.destinationViewController as brandsViewController 

что означает контроллер представления назначения не является экземпляром brandsViewController.

Чтобы устранить проблему:

  • проверка в интерфейсе строителя, что пользовательский класс недвижимости для контроллера представления назначения правильно установлен на brandsViewController
  • проверки, что переход на самом деле указывает на этот вид контроллера

Если ни одно из указанных выше не устраняет проблему, установите контрольную точку в этой строке и проверьте фактический тип контроллера режима назначения.

Сторона примечания: по соглашению в быстрых именах всех типов начинаются с буквы верхнего регистра, тогда как функции, переменные и свойства с нижним регистром. Если вы хотите сделать свой код доступным для других быстрых разработчиков, я предлагаю вам придерживаться этого соглашения (переименовать brandsViewController как BrandsViewController)

+0

Спасибо, я новичок в Swift/Xcode, и я забыл добавить Segue. – DannieCoderBoi

4

@antonios ответ должен решить вашу проблему. Разрыв происходит из-за того, что объект не отображается (найден и назначен).

Просто примечание стороны: вы будете иметь несколько проблем с этой линией:

if let storedAPIKeychain: AnyObject = dictionary.objectForKey("api_key") 

особенно если вы ждете, чтобы получить строку из нее и передать, что между ViewControllers?

Передайте его как строку, создайте глобальную переменную области видимости и затем назначьте ее этой переменной, чтобы ее использовать - будет гораздо легче обрабатывать ее.

+0

Это помогло мне целую кучу. – DannieCoderBoi

Смежные вопросы