2015-06-11 3 views
0

Так у меня есть установки, как это:EXC_BAD_ACCESS при выполнении segue для ViewController с UIWebView?

enter image description here

Где у меня есть пользовательский код контроллер представления читателя, и как только он обнаруживает штрих-код, я хочу, чтобы непосредственно перейти к другому контроллеру вида с меткой и UIWebView. Пока что он отлично работает с отображаемой меткой. По какой-то причине все, что я сделал, это добавить UIWebView и добавило IBOutlet в мой собственный пользовательский класс Second View Controller, и segue не будет работать из-за ошибки exc_bad_access. Ошибка указывает на следующую строку в мой код контроллера зрения читателя:

self.performSegueWithIdentifier("push", sender: self) //my segue is named push 

Вот мой второй код вид контроллера:

import UIKit 

public class SecondViewController: UIViewController { 
    var setText:String! 
    @IBOutlet weak var WebV: UIWebView! 


    @IBOutlet var label: UILabel! 
    override public func viewDidLoad() { 
     label.text = setText 
    } 

} 

РЕШЕНИЕ: Так что я просто понял, что, по какой-то причине, мой segue бежал от основной нити. Это происходит в закрытии? И означает ли это, что вы не можете выполнить segue в закрытии/блоке?

Любая помощь очень ценится. Огромное спасибо.

+0

Вы уверены, что в setText есть значение? – Icaro

+0

Вы уверены, что установили референсную розетку в Interface Builder? –

+0

Да - я использовал prepareForSegue для установки значения в 'setText' и управлял перетаскиванием с помощью редактора-помощника, чтобы автоматически установить реферирующую розетку. – rb612

ответ

1

Так что я только понял, что по какой-то причине мой segue убежал от основной нити. Отправка в основную очередь исправила проблему.

1

Предполагая, что из вашего кода,

у вас нет кода передать строку из CodeReaderViewController в SecondViewController.

Вот что я сделал (на самом деле для считывания штрих-кода, который я сделал):

class CodeReaderViewController : UIViewController { 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
     if segue.identifier == "push" { 
      let subVC: SecondViewController = segue.destinationViewController as SecondViewController 
      subVC.setText = <ANY TEXT WHICH YOU'D LIKE TO PASS TO SECONDVIEWCONTROLLER> 
     } 
    } 
} 

Если он не работает, пожалуйста, скажите мне, как это было написано сразу после Свифт вышел.

+0

Hi Naoto, Большое спасибо за ваш ответ. Однако у меня это реализовано в моем коде. Эта проблема возникает сразу же после того, как код переходит на '@ BIOutlet var webview: UIWebView!' В моем новом контроллере представления при попытке выполнить segue, он выдает ошибку exc_bad_access. – rb612

+0

@ rb612 Хорошо, это объясняет это. Возможно, вы захотите проверить свои выходы для CodeReaderViewController и SecondViewController. Может быть, IBOutlet, который вы забыли удалить, поэтому он не может найти его в коде ViewController. Я сомневаюсь, что это вызвано тем, что касается UIWebView. –

+0

Хм ... Я посмотрел на него, но, к сожалению, я не могу определить, почему он терпит неудачу. Я бы избавился от всего содержимого @IBOutlet в коде, а также всех подключений в Storyboard, а затем переделал его. Btw, вы уверены, что он терпит неудачу, когда достигли '@ BIOutlet var webview: UIWebView!'? –

0

Если вы уже вызываете prepareForSegue в основном потоке, но все еще получаете плохой доступ, дважды проверьте, используете ли вы правильный класс контроллера вида в раскадровке.

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