Core Data の概念を学習するための非常にシンプルなアプリを作成しています。このアプリでの私の目標は、tableView に人のリストを表示することです。
空のアプリケーションから始めて、コア データと ARC がチェックされていることを確認しました。また、*.xcdatamodeld、*.storyboard、および *.h/m ファイルを作成して、ビュー/機能をプログラムすることもできました。
アプリで、ユーザーが+
のナビゲーション バーのボタンをクリックするMainScreenViewController
と、アプリは別の viewController ( InputDetailsViewController
) を開き、ユーザーは名前、電話番号、電子メール、およびタグを入力できます。ユーザーが [保存] ボタンをクリックすると、アプリはデータを保存し、入力された情報を前の viewController のテーブルに表示します ( MainScreenViewController
)。
BasicInfo
データを管理するために、との 2 つのエンティティを作成しましDetailedInfo
た。BasicInfo
には 2 つの属性があります。 name
andphone
と relationship: details
connected to destinationDetailedInfo
です。同様に、 にはとと 関係:接続されたDetailedInfo
の 2 つの属性があります。これらの属性と関係を定義したら、エンティティごとにサブクラスを作成しました。email
tag
basic
BasicInfo
NSManagedObject
また、上記の属性に情報を入力するためのフィールドを作成することもできました。しかし、 の保存ボタンを押すと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]; //*
...
}
@終わり
//*
アプリが例外をスローする場所です。
問題がどこにあるかを調べるために、次のことを行いました。
- 私のコードを raywenderlich のチュートリアル (http://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started および他の 3 つのチュートリアル) のソース コードと比較しました。
- メソッドのステートメントを使用して、万一であるかどうか
managedObjectContext
を確認しました。nil
if ()
saveFields
- xcdatamodeld とファイル内の変数のスペルが同じであることを確認しました。
これ以上、エラーを見つける方法や、アプリが突然終了する理由がわかりません。
ご意見をお待ちしております。
前もって感謝します!