我一直在努力想象下面的代码出了什么问题。 当应用程序第一次在模拟器中运行时,我发现此代码正常工作。 但是当我关闭模拟器时,下次打开它并尝试删除记录,那次我得到exec_bad_access错误。
NSFetchRequest *requestToDelete = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Recipe" inManagedObjectContext:managedObjectContext];
[requestToDelete setEntity:entity];
NSPredicate *predicateWithTitle = [NSPredicate predicateWithFormat:@"RecipeId == %@", strRecipeId];
[requestToDelete setPredicate:predicateWithTitle];
NSError *errorInRequest = nil;
NSArray *results = [managedObjectContext executeFetchRequest:requestToDelete error:&errorInRequest];
[requestToDelete release];
if(errorInRequest!=nil )
{
NSLog(@"Unresolved error %@, %@", errorInRequest, [errorInRequest userInfo]);
abort();
}
if(results!=nil && [results count] > 0)
{
[managedObjectContext deleteObject:[results objectAtIndex:0]];
// Failing at this line
// To be specific, this is causing error : [results objectAtIndex:0]
// more strange part is, [results count] is 1
}
我试图找出我是否正在尝试访问任何已发布的对象。但无法理解。我用“Zombies”乐器运行了应用程序。它表示访问已释放的NSNumber对象导致该问题。 我使用“Build and Analyze”选项构建了应用程序。一切似乎都没问题。 任何人都可以帮助我吗?
。 。 。还有一件事,错误总是不会发生。如果记录超过1条,则可能会也可能不会出现错误。但如果只剩下一条记录要删除,则始终会发生错误。
答案 0 :(得分:0)
Recipe之间是否存在可能导致此问题的任何关系?
(另外,您只需执行if (errorRequest)
和if ([results count]) {...
)