2015-08-16 3 views
0

Я очень новичок в программировании и имею большую проблему, я потратил много часов на ее решение. Но я не понимаю, почему это происходит неправильно.фатальная ошибка после reloadData UITableView в другом классе

У меня есть ViewController с TableView и через другой ViewController Wheres вида Можно добавить данные в TableView. Из этого класса я вызываю func из первого класса ViewController, в этом func находится reloadData. И здесь начинается проблема. Приложение останавливается, и это только тогда, когда я вызываю func во втором классе. Когда я называю это в первом классе, проблема не возникает.

Вот первый класс:

Вот это FUNC:

func ladeDaten(){ 

    let request = NSFetchRequest(entityName: "Territory") 
    do { 
     territorys = try context.executeFetchRequest(request) as! [Territory] 
    } catch let gebieteError as NSError { 
     print("error: \(gebieteError.localizedDescription)") 
    } 
    gebieteTableView.reloadData() 

} 

Вот второй класс:

class NewGebietViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate{ 

Вот это FUNC:

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    let neuesGebiet = NSEntityDescription.insertNewObjectForEntityForName("Territory", inManagedObjectContext: self.targetVC.context) as! Territory 
    neuesGebiet.territoryName = self.newGebietNameTextField.text 
    do { 
    try self.targetVC.context.save() 
    }catch let gebieteError as NSError { 
     print("error: \(gebieteError.localizedDescription)") 
    } 
    self.targetVC.ladeDaten() 
    dismissViewControllerAnimated(true, completion: nil) 
    return true 
} 

Изображение, которое показывает ошибку

http://i.stack.imgur.com/qUo3e.png

Спасибо за помощь.

Больше кода с первого класса:

class GebieteViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

@IBOutlet weak var gebieteTableView: UITableView! 
@IBOutlet weak var menuButton: UIBarButtonItem! 
@IBOutlet weak var newGebietButton: DesignableButton! 
var territorys: [Territory]! 

Больше кода из второго класса:

class NewGebietViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate{ 

@IBOutlet weak var newGebietNameTextField: UITextField! 

let targetVC = GebieteViewController() 
+0

Параметр 'gebieteTableView' является нулевым. Вы используете раскадровку? Отправьте свой код о инициализации 'GebieteViewController'. – Bannings

+0

@Bannings вы имеете в виду инициализацию в 'NewGebietViewController'? – DanK7

+0

Да, я думаю, что, возможно, ваша инициализация неверна. Опять же, вы используете раскадровку? – Bannings

ответ

0

Вы должны заменить эту строку:

let targetVC = GebieteViewController() 

с:

lazy var targetVC: GebieteViewController = { 
    let targetVC = self.storyboard?.instantiateViewControllerWithIdentifier("YourIdentifier") as! GebieteViewController 
    return targetVC 
}() 

Использование идентификатора раскадровки, установленного в конструкторе интерфейса для создания и возврата контроллера вида.

Где я могу найти имя своего «Идентификатора»?

Смотрите также:


ОБНОВЛЕНО: (после просмотра проекта)

Проблема в том, что вы инициализировали GebieteViewController, но вы не отобразили его так, чтобы tableView был равен нулю.Это означает, что loadView и viewDidLoad не будут выполняться в targetVC.

Кстати, вам не нужно создавать новый GebieteViewController, поскольку NewGebietViewController был представлен через модально, так просто получить его, то вы можете позвонить reloadData из существовавшего GebieteViewController экземпляра.

Чтобы исправить это просто использовать эти код:

lazy var targetVC: GebieteViewController = { 
    let targetVC = (self.presentingViewController as! UINavigationController).topViewController as! GebieteViewController 
    return targetVC 
}() 
+0

Где я могу найти имя моего «Идентификатора»? – DanK7

+0

Ссылка поможет вам: http: //sketchytech.blogspot.com/2012/11/instantiate-view-controller-using.html – Bannings

+0

Обновлен мой ответ. Дайте мне знать, если это работает :) – Bannings

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

  • Нет связанных вопросов^_^