0

我对编程很陌生,遇到了一个大问题,我花了很多时间来解决它。但我不明白为什么会出错。

我有一个ViewControllerwith aTableView和一个ViewControllerwheres 的 View,您可以将数据添加到TableView. 从这个类中,我从第一个ViewController类中调用一个 func,在这个 func 中是reloadData. 问题就从这里开始了。该应用程序停止,并且仅当我在第二类中调用 func 时才停止。当我在头等舱中调用它时,从来没有出现过问题。

这是第一堂课:

class GebieteViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

这是函数:

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 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()
4

1 回答 1

0

你应该替换这一行:

let targetVC = GebieteViewController()

和:

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

使用您在界面生成器中设置的故事板 ID 来创建和返回视图控制器。

我在哪里可以找到我的“标识符”的名称?

也可以看看:


更新:(看到项目后)

问题是你初始化了GebieteViewController但你没有显示它所以它tableView是零。这意味着loadViewandviewDidLoad不会在targetVC.

顺便说一句,您不需要创建一个新GebieteViewController的,因为它NewGebietViewController是通过模态呈现的,所以只需获取它,然后您就可以调用reloadData现有GebieteViewController实例的。

要解决此问题,只需使用以下代码:

lazy var targetVC: GebieteViewController = {
    let targetVC = (self.presentingViewController as! UINavigationController).topViewController as! GebieteViewController
    return targetVC
}()
于 2015-08-16T13:46:10.107 回答