我的应用只是一个数据库,用户只需搜索一些科学数据。它的构建如下:
- 必须通过TabBarViewController选择“主”视图。 - 第一个视图是用户进入搜索查询的位置。 - secon视图只是一些设置,信息和免责声明信息。
我使用第二个视图预先填充将随应用程序一起发布的数据库。现在已经填充了,我将实际实现设置,信息等。
在AppDelegate(applicationDidFinish ...)中设置了managedObjectContext,如下所示:
firstViewViewController.managedObjectContext = self.managedObjectContext;
secondViewController.managedObjectContext = self.managedObjectContext;
saveCustom.managedObjectContext = self.managedObjectContext;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
在secondViewController中正确声明了managedObjectContext。
到目前为止,该应用程序工作正常,我可以将项目保存到数据库中。
现在,我创建了一个从firstViewController调用的modalView。我希望用户能够保存自定义数据。为此,我复制了我在seconViewController中所做的事情,并在AppDelegate中添加了相应的代码(或我认为的代码)(见上文)。
当我尝试使用modalVIew保存数据时,我收到以下错误。
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'+ entityForName:无法找到实体名称XXX的NSManagedObjectModel
其中XXX是我的实体的正确名称。
我知道这与托管的ObjectObjectContext没有被初始化有关。但我不明白为什么它在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];
}
答案 0 :(得分:0)
根据您的描述,它看起来不像这样,但仍值得一试。
您是否在启动应用程序后修改了Core-Data模型? 如果是,则需要进入应用程序文件夹并删除Core-Data支持文件 因为它现在与您的模型不同步,核心数据不知道如何处理它。
唯一的疑问是,我在修改后启动应用程序时会收到该错误,而不是稍后2或3次查看。
如何以模态方式呈现该视图,在何处创建该视图以及在何处以模态方式呈现该视图的上下文?
你忘了告诉UIViewController使用什么上下文。
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;
当您在applicationFinised中执行此操作时...您的实例尚不存在。
在Obj-C中,您可以向nil发送消息,它将被忽略,您不会像其他语言一样崩溃。