0

私はプログラミングに非常に慣れておらず、大きな問題を抱えています。解決するのに何時間も費やしました。しかし、なぜこれがうまくいかないのか理解できません。

と があり、データViewControllerをに追加できるビューがあります。このクラスから、最初のクラスの func を呼び出します。この func には. そして、ここから問題が始まります。アプリが停止します。これは、2 番目のクラスで func を呼び出した場合にのみ発生します。最初のクラスで呼び出すと、問題は発生しません。TableViewViewControllerTableViewViewControllerreloadData

最初のクラスは次のとおりです。

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

}

2番目のクラスは次のとおりです。

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]!

2 番目のクラスからの追加のコード:

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 を使用して、View Controller を作成して返します。

「識別子」の名前はどこにありますか?

以下も参照してください。


更新:(プロジェクトを見た後)

問題は、 を初期化したGebieteViewControllerが表示しなかったため、tableViewは nil であることです。つまり、loadViewandviewDidLoadは では実行されませんtargetVC

GebieteViewControllerところで、 は Modally を介して提示されたので、新しく作成する必要はありません。取得するだけで、既存のインスタンスのNewGebietViewControllerを呼び出すことができます。reloadDataGebieteViewController

これを修正するには、次のコードを使用します。

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