UIAlertView clickedButtonAtIndex EXC_BAD_ACCESS

时间:2011-04-21 11:15:34

标签: iphone uialertview exc-bad-access

我目前有一个带有两个选项按钮的UIAlertView。当用户按下其中一个按钮时,我希望调用一个方法(在同一个对象中),然后从Web检索文件。

我可以调用方法并且可以调用NSLog(),但是一旦我使用任何对象变量,我就会收到EXC_BAD_ACCESS错误。

我的第一个想法是它可能是一个线程问题,所以考虑调用NSNotificationCenter可能会解决它,但这也会以同样的错误结束。

以下是我目前获得的代码。我尝试了一些不同的东西(有些被注释掉)无济于事。 'dbURL'对象是类的属性。 (修改:代码未完成)

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

//If database update
[[NSNotificationCenter defaultCenter] postNotificationName:@"newdb" object:self]; //EXC_BAD_ACCESS happens here

if ([alertView.title isEqualToString: @"Database Update"]){
    switch (buttonIndex) {
        case 0:
            //[self getNewDatabase];
            //[self performSelectorOnMainThread:@selector(getNewDatabase) withObject:nil waitUntilDone:NO];
            //[NSThread detachNewThreadSelector:@selector(getNewDatabase) toTarget:self withObject:nil];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"newdb" object:self];
            break;




// Get a new database file from the server
- (void)getNewDatabase{


    NSLog(@"in database: %@", dbURL);
}

提前致谢!

2 个答案:

答案 0 :(得分:1)

问题是我调用的对象没有被正确保留,因此引用丢失,导致EXC_BAD_ACCESS错误

感谢Nick Weaver。在构建选项中使用 NSZombieEnabled 参数有助于识别恶意引用。

答案 1 :(得分:0)

您无法将NSString与==进行比较。您需要使用 isEqualToString

[alertView.title isEqualToString:@"Database Update"]