我的应用中的核心数据问题

时间:2012-10-31 17:45:05

标签: ios core-data

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

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

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

为了管理数据,我创建了两个实体:BasicInfoDetailedInfoBasicInfo有两个属性:namephone以及与目标details相关联的DetailedInfo关系。同样,DetailedInfo有两个属性:emailtag以及与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]; //*

...
}

@end

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

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

  1. 我将我的代码与raywenderlich教程中的源代码进行了比较(http://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started和其他3个教程)。
  2. 通过managedObjectContext方法使用nil语句,检查if ()是否saveFields。{/ li>
  3. 确保拼写在xcdatamodeld和文件中的变量中相同。
  4. 除此之外,我不知道如何找到错误或为什么我的应用程序突然终止。

    我真诚地感谢您的意见。

    提前谢谢!

1 个答案:

答案 0 :(得分:0)

从评论部分:

这就是您收到错误的原因。您需要将self.managedObjectContext分配给AppDelegate中的managedObjectContext。在你这样做之后,你的错误就会消失