Iphone 使用ModalView通过CoreData保存数据
我的应用程序只是一个数据库,用户只需搜索一些科学数据。它是这样建造的:Iphone 使用ModalView通过CoreData保存数据,iphone,ios,core-data,modalviewcontroller,Iphone,Ios,Core Data,Modalviewcontroller,我的应用程序只是一个数据库,用户只需搜索一些科学数据。它是这样建造的: firstViewViewController.managedObjectContext = self.managedObjectContext; secondViewController.managedObjectContext = self.managedObjectContext; saveCustom.managedObjectContext = self.managedObjectContext; self.
firstViewViewController.managedObjectContext = self.managedObjectContext;
secondViewController.managedObjectContext = self.managedObjectContext;
saveCustom.managedObjectContext = self.managedObjectContext;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
-它必须是可由TabBarViewController选择的“主”视图。
-第一个视图是用户进行搜索查询的地方。
-secon视图只是一些设置、信息和免责声明信息
我使用第二个视图来预填充DB,它将随应用程序一起提供。现在已经填充了,我将实际实现设置、信息等
managedObjectContext在AppDelegate(ApplicationIDFinish…)中设置,如下所示:
firstViewViewController.managedObjectContext = self.managedObjectContext;
secondViewController.managedObjectContext = self.managedObjectContext;
saveCustom.managedObjectContext = self.managedObjectContext;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
managedObjectContext在secondViewController中正确声明为ans合成
到目前为止,该应用程序运行正常,我可以将项目保存到数据库中
现在,我创建了一个从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];
}从您描述的内容来看,它看起来不像这样,但仍然值得一试 自从启动应用程序以来,您是否修改了核心数据模型?
如果是,您需要进入应用程序文件夹并删除核心数据备份文件。
因为它现在与您的模型和核心数据不同步,所以不知道如何处理它 我唯一的疑问是,当我在修改后启动应用程序时,我会收到这个错误,而不是在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;
当您在ApplicationNised中执行此操作时。。。您的实例尚不存在。在Obj-C中,你可以向nil发送一条消息,它将被忽略,您不会像在其他语言中那样崩溃。您可以发布用于尝试添加NSManagedObjects的代码吗?请仔细检查您在saveCustomerController中使用的MOC是否与您的其他view controller和app delegate查看的模型和永久存储相同。等等,我所做的是在我的笔记本电脑上而不是在我的台式电脑上进行一些编码工作,但在笔记本电脑上工作时,我没有弄乱核心数据。你的意思是要删除iPhone模拟器中的App文件夹吗?也许可以,但我指的是这样的核心数据文件:~Library/Application\Support/iPhone\Simulator/4.3.2/Applications/99859124-D963-4FB2-9D59-1408xxxxxxx/Documents/Simple_address_Book.sqliteYeah,所以你指的是模拟器中的实际DB文件。是的,我删除了,然后重新开始。不起作用。太糟糕了。从模拟器中删除应用程序的整个文件夹-根据我的经验,这通常是修改数据模型出现异常的原因。我添加了以下行:viewTwo.managedObjectContext=managedObjectContext;现在它没有得到任何错误,但也没有保存任何数据。。。不过,这是向前迈出的一步。