2012-04-17 4 views
0

私はこの問題の解決策を数日間探していましたが、同様の投稿を見つけましたが、私はdealloc'dを取得することから取り組んでいるインスタンスを停止します。うまくいけば、私はそれがUIAlertViewDelegateプロトコルに準拠することを宣言しているクラス(LKNetworking)を持っているUIAlertViewDelegateクラス "self"インスタンスがボタンが押される前にdeallocされました

..私はちょうどそれを逃した、または誰かが私は私の脳を障る停止することができます。現在はNSObjectのサブクラスですが、私はUIResponderを試しましたが、同じ問題が発生しています。

問題は、UIAlertビューを作成し、デリゲートをselfに設定することです。 UIAlertビューはOKを表示しますが、呼び出すLKNetworkingクラスインスタンスは即座に(NSLOGで表示されるように)deallocされ、ボタンをクリックすると、メッセージは割り当て解除されたインスタンスに送信されます(LKNetworking alertView:clickedButtonAtIndex:割り当て解除インスタンス0x6e5ce40)SO

に送信されたメッセージは、私のような.hファイルでプロパティを作成しようとしました:

@property (strong, nonatomic) LKNetworking *strongNetworkingProperty 

私はその後、strongNetworkingPropertyのIVARとメッセージに私のUIAlertViewのデリゲートを設定しようどこにも行かないようですので、いいですね。

私はいくつかの答えを見ましたwここでは、ここで

アラートが呼び出され LKNetworkingメソッドのサンプルコード..です人々は delegate nilにアラートビューを設定すると言うが、私は、ユーザーの選択に応じて応じて行動する必要があるので、それは私の全体の目的に反し 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 

ご意見をいただければ幸いです。

おかげ

+0

作成中のLKNetworkingインスタンスは表示されません。 – CodaFi

+0

@CodaFi:LKNetworkingは私のAppDelegateからインスタンス化され、元のcheckGameVersion:の呼び出しが呼び出されます。 – Lkabo

答えて

6

あなたのLKNetworkingの周りに滞在したい場合は、何かがそれへの参照を保持する必要があります。それはLKNetworkingオブジェクトそのものです。アラートビューを作成するときは、strongNetworkingProperty = selfを設定します。これにより、システムがLKNetworkingオブジェクトの割り当てを解除するのを防ぐ保持サイクルが作成されます。 alertView:clickedButtonAtIndex:でstrongNetworkingPropertyをnilに設定して、保持サイクルを解除します。

+0

WOW!それはそれをした!私は夢中になりました、ありがとうございました!多く! – Lkabo

+0

私はこれを数年にわたって把握しようとしてきました。警報はごみです!ありがとう... –

+0

こんにちは。あなたの投稿のコードを投稿できますか? Mここで少し混乱します。 – Inder

関連する問題