几天来,我一直在寻找这个问题的解决方案,并找到了一些类似的帖子,但似乎没有人发布关于如何阻止我正在使用的实例被释放的明确答案。希望我只是错过了它,或者有人可以帮助我停止破坏我的大脑..
我有一个类 ( LKNetworking
),它声明它符合UIAlertViewDelegate
协议。目前它是 的子类NSObject
,但是我已经尝试过UIResponder
,但都产生了同样的问题。
问题是我创建了一个 UIAlert 视图并将委托设置为self
. UIAlert 视图显示 OK,但随后LKNetworking
调用它的 Class 实例立即被释放(正如我在 NSLOG 中显示的那样),当我单击按钮时,消息被发送到释放的实例(LKNetworking alertView:clickedButtonAtIndex:]: message发送到释放的实例 0x6e5ce40)
所以,我试图在 .h 文件中创建一个属性,如下所示:
@property (strong, nonatomic) LKNetworking *strongNetworkingProperty
然后我尝试将我的 UIAlertView 的委托设置为 strongNetworkingProperty ivar,并且消息似乎无处可去,所以这不好..
我看到了一些答案,人们说将警报视图设置delegate
为nil
,但这违背了我的整个目的,因为我需要根据用户的选择采取相应的行动。
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
任何建议将不胜感激!
谢谢