我的应用程序在设备上测试时崩溃,但在模拟器上未测试。它发生在我注销时。我删除从核心数据都记录在用户注销时,代码如下:从核心数据删除对象 - 崩溃的应用程序
-(IBAction)logOut
{
UIAlertView *getConfirmation = [[UIAlertView alloc] initWithTitle:@"Confirm" message:@"Are you sure you want to logout. You will lose any unsync'ed workouts." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Logout", nil];
[getConfirmation show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1){
// Clear the database of all objects when the user logs out.
[self deleteAllObjects:@"Workout"];
[self deleteAllObjects:@"Route"];
[self deleteAllObjects:@"WayPoint"];
[self deleteAllObjects:@"Graphs"];
[self deleteAllObjects:@"userSettings"];
[self presentModalViewController:loginViewController animated:NO];
}
}
-(void)deleteAllObjects:(NSString *)entityDescription{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
for (NSManagedObject *managedObject in items) {
[managedObjectContext deleteObject:managedObject];
NSLog(@"%@ object deleted", entityDescription);
}
if (![managedObjectContext save:&error]) {
NSLog(@"Error deleting %@ - error:%@",entityDescription,error);
}
}
这似乎是发生在我登录和注销立竿见影。在这种情况下,5个表中的4个不会有对象(注意:userSettings会有1条记录)。
看看控制台的错误消息是'***终止应用程序,由于未捕获的异常'NSInternalInconsistencyException',原因:'此NSPersistentStoreCoordinator没有持久性存储。它不能执行保存操作。'',看着调试器发生在线if (![managedObjectContext save:&error])
上。
我不太清楚为什么会发生这种情况,此时在表格“锻炼”中没有记录,因此没有任何可删除的记录。模拟器似乎处理这个没有问题。持久性存储代码的
详情:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"LegginitCoreData.sqlite"]];
NSError *error;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
// Handle error
}
return persistentStoreCoordinator;
}
任何帮助将不胜感激,我卡在这一个不是,也不知道从哪里何去何从。
看着控制台的输出,也许崩溃报告肯定会有帮助。 – Eiko 2010-08-20 09:20:35
在调试器中查看应用程序崩溃的代码行 – rano 2010-08-20 09:27:39
对不起,我应该从控制台发布结果。我现在就做。 – Stephen 2010-08-20 09:36:20