我正在制作一个非常简单的应用程序来学习核心数据的概念。在这个应用程序中,我的目标是在 tableView 中显示人员列表。
我从一个空应用程序开始,并确保核心数据和 ARC 被勾选。我还设法创建了 *.xcdatamodeld、*.storyboard 和 *.h/m 文件来对视图/功能进行编程。
在应用程序中,如果用户单击+
导航栏上的按钮MainScreenViewController
,应用程序会打开另一个视图控制器(InputDetailsViewController
),让用户输入姓名、电话号码、电子邮件和标签。MainScreenViewController
当用户单击 Save 按钮时,应用程序会保存数据并在前一个 viewController ( )的表格上显示输入的信息。
为了管理数据,我创建了两个实体:BasicInfo
和DetailedInfo
. BasicInfo
有两个属性:name
和phone
和关系:details
连接到目的地DetailedInfo
。同理,DetailedInfo
有两个属性:email
andtag
和关系:basic
connected to 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 中的拼写和文件中的变量相同。
除此之外,我不知道如何找到错误或为什么我的应用程序突然终止。
我真诚地感谢您的意见。
先感谢您!