在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设置为零来打破保留周期。