私はこの問題の解決策を数日間探していて、同様の投稿をいくつか見つけましたが、作業中のインスタンスが割り当て解除されるのを防ぐ方法についての決定的な答えを投稿した人はいないようです。うまくいけば、私はそれを見逃したか、誰かが私の脳を壊すのをやめるのを手伝ってくれるでしょう。
プロトコル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
任意の提案をいただければ幸いです!
ありがとう