1

Core Data の概念を学習するための非常にシンプルなアプリを作成しています。このアプリでの私の目標は、tableView に人のリストを表示することです。

空のアプリケーションから始めて、コア データと ARC がチェックされていることを確認しました。また、*.xcdatamodeld、*.storyboard、および *.h/m ファイルを作成して、ビュー/機能をプログラムすることもできました。

アプリで、ユーザーが+のナビゲーション バーのボタンをクリックするMainScreenViewControllerと、アプリは別の viewController ( InputDetailsViewController) を開き、ユーザーは名前、電話番号、電子メール、およびタグを入力できます。ユーザーが [保存] ボタンをクリックすると、アプリはデータを保存し、入力された情報を前の viewController のテーブルに表示します ( MainScreenViewController)。

BasicInfoデータを管理するために、との 2 つのエンティティを作成しましDetailedInfoた。BasicInfoには 2 つの属性があります。 nameandphoneと relationship: detailsconnected to destinationDetailedInfoです。同様に、 にはとと 関係:接続されたDetailedInfoの 2 つの属性があります。これらの属性と関係を定義したら、エンティティごとにサブクラスを作成しました。emailtagbasicBasicInfoNSManagedObject

また、上記の属性に情報を入力するためのフィールドを作成することもできました。しかし、 の保存ボタンを押すとInputDetailsViewController、次のメッセージが表示されます。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'BasicInfo''

私のコードの関連セクションは次のとおりです。

InoutDetailsViewController.h:

#import <UIKit/UIKit.h>
#import "BasicInfo.h"
#import "DetailedInfo.h"

@interface InputDetailsViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UITextField *phoneField;
@property (weak, nonatomic) IBOutlet UITextField *emailField;
@property (weak, nonatomic) IBOutlet UITextField *tagField;
@property (nonatomic,strong) NSManagedObjectContext* managedObjectContext;

- (IBAction)closeKeyboard;
- (IBAction)saveFields;

InputDetailsViewController.m:

#import "InputDetailsViewController.h"

@interface InputDetailsViewController ()
@end

@implementation InputDetailsViewController

@synthesize nameField, phoneField, emailField, tagField;
@synthesize managedObjectContext;


- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (IBAction)closeKeyboard
{
    [nameField resignFirstResponder];
    [phoneField resignFirstResponder];
    [emailField resignFirstResponder];
    [tagField resignFirstResponder];
}

- (IBAction)saveFields
{
    if (self.managedObjectContext == nil) {
    NSLog(@"NSManagedObjectContext is nil");
    }

    BasicInfo *basicInfo = (BasicInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"BasicInfo" inManagedObjectContext:managedObjectContext]; //*
    DetailedInfo *detailedInfo = (DetailedInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"DetailedInfo" inManagedObjectContext:managedObjectContext]; //*

...
}

@終わり

//*アプリが例外をスローする場所です。

問題がどこにあるかを調べるために、次のことを行いました。

  1. 私のコードを raywenderlich のチュートリアル (http://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started および他の 3 つのチュートリアル) のソース コードと比較しました。
  2. メソッドのステートメントを使用して、万一であるかどうかmanagedObjectContextを確認しました。nilif ()saveFields
  3. xcdatamodeld とファイル内の変数のスペルが同じであることを確認しました。

これ以上、エラーを見つける方法や、アプリが突然終了する理由がわかりません。

ご意見をお待ちしております。

前もって感謝します!

4

1 に答える 1

0

コメント欄より:

これが、エラーが発生する理由です。AppDelegate で、self.managedObjectContext を managedObjectContext に割り当てる必要があります。あなたがした後、あなたのエラーは消えるはずです

于 2012-10-31T19:38:40.497 に答える