我的应用程序只是一个数据库,用户只是搜索一些科学数据。它是这样构建的:
-它必须"主"视图可由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,它会被忽略,你不会像在其他语言中那样崩溃。