0
- (void)doneButtonPressed
{
    //判断已存在这个title的proj的话不创建

    //存储CD数据
    Project *newProject = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
    //!!!!crash here!!!!
    newProject.title = self.titleTextField.text;
    newProject.subtitle = self.subtitleTextField.text;
    newProject.progress = [NSNumber numberWithFloat:1.0f];
    newProject.pid = @"001";

    NSError* savingError = nil;
    if (newProject != nil){
        if ([self.managedObjectContext save:&savingError]){
            NSLog(@"Saved!");
        }
        else{
            NSLog(@"Fail to save the proj");
        }
    }
    else{
        NSLog(@"Fail to create new proj");
    }
}

我只是将这些代码添加到我的CertainViewController.m中,发现我无法将内容保存到核心数据中。

下面说明原因:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“+entityForName:找不到实体名称“Project”的 NSManagedObjectModel

我是否错过了一些预设CertainViewController

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong) NSEntityDescription *entityDescription;

我确实将这两个属性包含在 .h 中,并将它们合成到 .h 中.m

非常感谢您的回答;)

4

2 回答 2

1

答案很简单。您没有正确设置上下文。

如果我猜对了(我确实因为我测试了它),那么你只有alloc init这样的上下文:
self.managedObjectContext = [[NSManagedObjectContext] alloc] init];

像这样定义的上下文是孤立的,因为它没有NSPersistentStoreCoordinatororparentContext来获取持久存储。

您应该从前一个视图控制器传递上下文,或者自己设置它:

//Example:
AppDelegate* delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:<#(NSManagedObjectContextConcurrencyType)#>];
[self.managedObjectContext setPersistentStoreCoordinator:delegate.persistentStoreCoordinator];
于 2013-05-01T18:33:35.930 回答
0

检查以下步骤:

  1. 运行后尝试从模拟器或设备中删除应用程序

  2. 检查以下教程, http: //www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started http://mobile.tutsplus.com/tutorials/iphone/iphone-core-数据/

于 2013-05-01T08:42:44.857 回答