访问从FetchRequest返回的NSArray时exec_bad_access

时间:2010-11-03 12:00:24

标签: iphone

我一直在努力想象下面的代码出了什么问题。 当应用程序第一次在模拟器中运行时,我发现此代码正常工作。 但是当我关闭模拟器时,下次打开它并尝试删除记录,那次我得到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条,则可能会也可能不会出现错误。但如果只剩下一条记录要删除,则始终会发生错误。

1 个答案:

答案 0 :(得分:0)

Recipe之间是否存在可能导致此问题的任何关系?

(另外,您只需执行if (errorRequest)if ([results count]) {...