使用ModalView通过CoreData保存数据



我的应用程序只是一个数据库,用户只是搜索一些科学数据。它是这样构建的:

-它必须"主"视图可由TabBarViewController选择。-第一个视图是用户直接进行搜索查询的地方。-第二个视图只是一些设置,信息和免责信息。

我使用第二个视图来预填充DB,它将随应用程序一起发布。现在它已经填充,我将实际实现设置,信息等。

managedObjectContext在AppDelegate (applicationDidFinish…)中设置,如下所示:

 firstViewViewController.managedObjectContext = self.managedObjectContext; 
secondViewController.managedObjectContext = self.managedObjectContext;
saveCustom.managedObjectContext = self.managedObjectContext;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;

managedObjectContext在secondViewController中被正确地声明和合成。

应用程序,到目前为止,工作正常,我可以保存项目到DB。

现在,我创建了一个从firstViewController调用的modalView。我希望用户能够保存自定义数据。为了做到这一点,我复制了我在seconViewController中所做的,并在AppDelegate中添加了相应的代码(或者我认为它是什么)(见上文)。

当我尝试使用modalVIew保存数据时,我得到以下错误。

*由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'+entityForName:无法找到实体名称XXX的NSManagedObjectModel

其中XXX为我的实体的正确名称。

我知道这是与managedObjectContext没有被初始化有关的东西。但我不明白为什么它在seconViewController上工作,而不是在modalViewController上。

那么,我怎样才能使它工作呢?

我知道,导入AppDelegate到modalView,虽然它会工作,这不是一个好的做法。

提前感谢!

编辑:

我用来保存数据的代码如下:
-(void)saveDataToCD{
NSString *entityString=[NSString stringWithFormat:@"%@",[arrayAdquiritDelMV objectAtIndex:1]];
NSString *deltaString=[NSString stringWithFormat:@"%@",[arrayAdquiritDelMV objectAtIndex:3]];


    NSManagedObjectContext *context = [self managedObjectContext];
    NSManagedObject *pepe = [NSEntityDescription insertNewObjectForEntityForName:entityString inManagedObjectContext:context];  // aqui un string
    [pepe setValue:assigment.text forKey:@"definition"];
    [pepe setValue:impurity.text forKey:@"impurity"];
    [pepe setValue:[NSNumber numberWithDouble:[delta.text doubleValue]] forKey:deltaString];  //aquí un string

    NSError *error;

    if (![context save:&error]) 
    {
        NSLog(@"Problem saving: %@", [error localizedDescription]);
    }}
编辑#2,这是我如何调用模态视图:
-(IBAction)saveCustom:(id)sender{
if(saveCustomController == nil)
{
    SaveCustom *viewTwo = [[SaveCustom alloc] initWithNibName:@"SaveCustom" bundle:[NSBundle mainBundle]];
    self.saveCustomController = viewTwo;
    [viewTwo release];
}
[self presentModalViewController:self.saveCustomController animated:YES];

}

从你描述的情况来看,它看起来不像这样,但仍然值得一试。

在启动应用程序后,是否修改了Core-Data模型?
如果是,您需要进入应用程序文件夹并删除Core-Data备份文件。
因为它现在与你的模型和核心数据不同步,我不知道该怎么处理它。

我唯一的疑问是,当我在修改后启动我的应用程序时,我会收到这个错误,而不是2或3个视图后。


你如何模态地呈现那个视图,你在哪里创建它你在哪里设置你模态地呈现那个视图的上下文?


你忘记告诉UIViewController使用什么context。

if(saveCustomController == nil)
{
SaveCustom *viewTwo = [[SaveCustom alloc] initWithNibName:@"SaveCustom" bundle:[NSBundle mainBundle]];
self.saveCustomController = viewTwo;
[viewTwo release];
}
[self presentModalViewController:self.saveCustomController animated:YES];

你少了一行像这样的

viewTwo.managedContext = aManagedContext;

当你在applicationfinished中做…您的实例还不存在。
在Obj-C中你可以发送一个消息给nil,它会被忽略,你不会像在其他语言中那样崩溃。

最新更新