我一直在寻找这个问题的解决方案几天,并找到一些类似的帖子,但没有人似乎已经发布了明确的答案停止正在使用的实例从dealloc'd。希望我只是错过了,或有人可以帮助我停止伤害我的大脑..UIAlertViewDelegate类“self”实例在按下按钮之前获取dealloc'd
我有一个类(LKNetworking
)这是宣布它符合UIAlertViewDelegate
协议。目前它是NSObject
的一个子类,但是我尝试了UIResponder
,但要么产生相同的问题。
问题是我创建了一个UIAlert视图并将代理设置为self
。 UIAlert视图显示OK,但然后调用它的类实例立即被解除分配(就像我在NSLOG中展示的那样),当我点击一个按钮时,该消息被发送到解除分配的实例(LKNetworking alertView:clickedButtonAtIndex:]:发送到释放实例0x6e5ce40)
SO消息,我试图创建.h文件的属性为这样的:
@property (strong, nonatomic) LKNetworking *strongNetworkingProperty
然后我尝试我的UIAlertView中的委托设置为strongNetworkingProperty伊娃和消息似乎走不通,所以,这没有什么好..
我看到一些答案w这里的人说,设置警戒意见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 2012-04-17 01:05:18
@CodaFi:LKNetworking从我的AppDelegate实例化,其中原始调用checkGameVersion:被调用。 – Lkabo 2012-04-17 01:13:01