我目前有一个带有两个选项按钮的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);
}
提前致谢!
答案 0 :(得分:1)
问题是我调用的对象没有被正确保留,因此引用丢失,导致EXC_BAD_ACCESS错误
感谢Nick Weaver。在构建选项中使用 NSZombieEnabled 参数有助于识别恶意引用。
答案 1 :(得分:0)
您无法将NSString与==进行比较。您需要使用 isEqualToString :
[alertView.title isEqualToString:@"Database Update"]