2

みなさん、こんにちは—私はiPhoneプログラミングとCoreDataの初心者です。私は現在、Core Dataの背後にある理論のいくつかを学ぼうとしており、このチュートリアルを使用してアプリに実装するのに役立てています。

チュートリアルUITableViewControllerでは、保存されたオブジェクトを一覧表示するメインビューと、オブジェクトを保存する別のビューUITableViewController(属性を入力する場所)を作成することで説明します。

私が作成しているアプリには3つのビューがあります。メインビューはプレーンUIViewController(計算を処理します)です。をタップするUIBarButtonItemと、より具体的な属性を入力する2番目のビューに移動して計算を保存できます。[保存]をタップすると、メインビューに戻ります。ここで、[保存済みの表示]ボタンをタップして、UITableViewController含まれている保存済みオブジェクトにアクセスできます。

#importedUITableViewControllerファイルをメインビューのインターフェイスファイルに含めましたが、プログラムを実行すると、prepareForSegueメソッドの次の行でエラーが発生します。

    addShoeSizeTVC.managedObjectContext = self.managedObjectContext;

エラーは「プロパティmanagedObjectContextがタイプ'SSFViewController*'のオブジェクトに見つかりません」です。このエラーの意味を理解しています— SSFViewControllerクラスにmanagedObjectContextというオブジェクトがありませんが、ファイルを含めると、引き続き認識されるmanagedObjectContextが含まれています。チュートリアルでは、prepareForSegueメソッドがセグエのリストビューに含まれていて、新しいオブジェクトを追加することを追加する必要がありますUITableViewController。このメソッドを自分のに移動しましたmainViewController

ApplicationDidFinishLaunchingWithOptionsまた、メソッドのAppDelegateでエラーが発生します。

    controller.managedObjectContext = self.managedObjectContext;

これは、他のエラーと同じ問題が原因であると理解しています(同じエラーメッセージが表示されます)。

viewA(mainView)からviewB(オブジェクトの追加)、viewA、viewC(保存されたオブジェクトの表示)にデータを渡す方法がわかりません。委任について聞いたことがあり、メインビューのprepareForSegueメソッドで使用しています。SSFViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"Add Object Segue"]) {

        NSLog(@"Setting ObjectsTVC as a delegate of AddObjectTVC");
        AddObjectTVC *addObjectTVC = segue.destinationViewController;
        addObjectTVC.delegate = addObjectTVC.self;
        addObjectTVC.managedObjectContext = addObjectTVC.self.managedObjectContext;
    }
}

また、このaddObjectTVC.delegate = addObjectTVC.self;行には、「互換性のないタイプ「id」のパラメーターに「AddObjectTVC*」を渡す」という警告が表示されます。

NSManagedContextメインビューでまたは別の委任メソッドを設定する必要がありますか?それとも、テーブルビューのいずれかに追加する必要があるものですか?

どうもありがとうございます。適切な情報が提供されれば、これは簡単に解決できる問題だと思います。問題を解決するために必要な場合は、使用した他の方法を投稿できてうれしいです。私は初心者ですので、初心者にわかりやすい説明をいただければ幸いです。

ありがとう!

4

2 に答える 2

1

まず、ViewAからViewBにデータが必要な場合は、ViewBにプロパティを挿入すると、ViewAからこの@propertyにデータを渡すことができます。

ViewB:

@property(nonatomic、strong)NSString * yourName; (@synthesize yourNameを呼び出すことを忘れないでください)

ViewA:(prepareForSegueメソッド内)

"ViewB-Controller" * controller = segue.destinationViewController; controller.yourName = self.name

->名前はViewBに渡されます

2番目:ViewBからViewAに「データを保存してください」を送信するデリゲートが好きです。これにより、コントローラーが簡単かつスマートに保たれ、すべてのビューコントローラーからsaveメソッドを管理する必要がなくなります。DelegateはiOSの重要な章であり、初心者にとっては非常にイライラする可能性があります。(私は9か月前に同じ状況にありました;))代理人の例を検索し、それがどのように機能するかを理解しようとします(行うことで学習します)。代理人についてさらに質問がある場合は、私があなたの質問に親切に答えます。

于 2012-06-11T17:34:07.940 に答える
0

managedObjectContextプロパティを持つのはビューコントローラではなく、 UIManagedDocumentです。

コンテキストは通常​​、アプリがデータストアと連携する「スクラッチパッド」として説明されます。

于 2012-06-11T16:17:29.273 に答える