【发布时间】:2012-04-17 00:48:35
【问题描述】:
几天来我一直在寻找解决这个问题的方法,并找到了一些类似的帖子,但似乎没有人发布关于如何阻止我正在使用的实例被释放的明确答案.希望我只是错过了它,或者有人可以帮助我停止破坏我的大脑..
我有一个类 (LKNetworking),它声明它符合 UIAlertViewDelegate 协议。目前它是NSObject 的子类,但是我尝试过UIResponder,但都产生了同样的问题。
问题是我创建了一个 UIAlert 视图并将委托设置为self。 UIAlert 视图显示 OK,但随后调用它的 LKNetworking Class 实例立即被释放(正如我在 NSLOG 中显示的那样),当我单击按钮时,消息被发送到已释放的实例(LKNetworking alertView:clickedButtonAtIndex: ]: 消息发送到释放的实例 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
任何建议将不胜感激!
谢谢
【问题讨论】:
-
您永远不会显示正在创建的 LKNetworking 实例。
-
@CodaFi:LKNetworking 从我的 AppDelegate 中实例化,其中对 checkGameVersion: 的原始调用被调用。