1

我正在制作一个非常简单的应用程序来学习核心数据的概念。在这个应用程序中,我的目标是在 tableView 中显示人员列表。

我从一个空应用程序开始,并确保核心数据和 ARC 被勾选。我还设法创建了 *.xcdatamodeld、*.storyboard 和 *.h/m 文件来对视图/功能进行编程。

在应用程序中,如果用户单击+导航栏上的按钮MainScreenViewController,应用程序会打开另一个视图控制器(InputDetailsViewController),让用户输入姓名、电话号码、电子邮件和标签。MainScreenViewController当用户单击 Save 按钮时,应用程序会保存数据并在前一个 viewController ( )的表格上显示输入的信息。

为了管理数据,我创建了两个实体:BasicInfoDetailedInfo. BasicInfo有两个属性:namephone和关系:details连接到目的地DetailedInfo。同理,DetailedInfo有两个属性:emailandtag和关系:basicconnected 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]; //*

...
}

@结尾

//*是应用程序抛出异常的地方。

为了找出问题所在,我做了以下工作:

  1. 我将我的代码与 raywenderlich 教程(http://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started 和其他 3 个教程)上的源代码进行了比较。
  2. 通过使用方法中的语句检查是否managedObjectContextnil任何机会。if ()saveFields
  3. 确保 xcdatamodeld 中的拼写和文件中的变量相同。

除此之外,我不知道如何找到错误或为什么我的应用程序突然终止。

我真诚地感谢您的意见。

先感谢您!

4

1 回答 1

0

从评论部分:

这就是您收到错误的原因。您需要将 self.managedObjectContext 分配给 AppDelegate 中的 managedObjectContext。完成后,您的错误应该消失

于 2012-10-31T19:38:40.497 回答