在button被按下之前,UIAlertViewDelegate类的“self”实例被取消分配

我一直在寻找这个问题的解决scheme几天,并find了一些类似的post,但没有人似乎已经发布了一个明确的答案,如何停止我正在从dealloc'd工作的实例。 希望我只是错过了,或者有人可以帮助我停止伤脑筋

我有一个类( LKNetworking ),它声明它符合UIAlertViewDelegate协议。 目前它是NSObject一个子类,但是我尝试了UIResponder但是要么产生相同的问题。

问题是我创build了一个UIAlert视图并将该委托设置为self 。 UIAlert视图显示OK,但然后调用它的LKNetworking类实例立即dealloc'd(如我在NSLOG中显示),当我点击一个button,消息被发送到解除分配的实例(LKNetworking alertView:clickedButtonAtIndex:]:消息发送到解除分配的实例0x6e5ce40)

所以,我试图在.h文件中创build一个属性,如下所示:

 @property (strong, nonatomic) LKNetworking *strongNetworkingProperty 

然后我尝试设置我的UIAlertView的委托给strongNetworkingProperty伊娃和消息似乎去任何地方,所以这没有什么好..

我看到一些答案,人们说设置提醒视图delegate nil ,但是这打败了我的整个目的,因为我需要采取相应的行动,以响应用户select..

这里是调用alert的LKNetworking方法的示例代码和delegate方法:

 -(void)checkGameServerVersion: (float) serverGameVersion { if (serverGameVersion == GAMEVER) { NSLog(@"matched"); // Continue flow here.. } else { NSLog(@"not matched"); //Game version does not match, end game, force upgrade UIAlertView *oldVersion = [[UIAlertView alloc]initWithTitle:@"Ugrade Required" message:@"A new game version is available, Please update your game and try again." delegate:self cancelButtonTitle:@"Quit" otherButtonTitles: nil]; [oldVersion show]; } } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSLog(@"button = %d",buttonIndex); if (buttonIndex == 0 ) { NSLog(@"pressed button 0, quitting gam"); } } @end 

任何build议将不胜感激!

谢谢

如果你想让你的LKNetworking留在身边,需要引用它。 那东西可以是LKNetworking对象本身。 在创build警报视图时,设置strongNetworkingProperty = self。 这将创build一个保留周期,防止系统释放LKNetworking对象。 然后在alertView:clickedButtonAtIndex:中,将strongNetworkingProperty设置为零来打破保留周期。