1

アプリケーションがクラッシュすることはめったにありません。あるときそれがクラッシュし、私は次のレポートを受け取りました:

[UIViewAnimationState release]:message sent to deallocated instance

これがどこで使われているのかわかりません。コードでアニメーションを使用していません。クラッシュの理由は何でしょうか?

これは私がそれがクラッシュしていると思うコードです

-(void)showMessageSendingIndicator
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init]; 
    self.av1=[[UIAlertView alloc] initWithTitle:@"Sending Message, please wait..." message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
    UIActivityIndicatorView *ActInd=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [ActInd startAnimating];
    [ActInd setFrame:CGRectMake(125, 60, 37, 37)];
    [self.av1 addSubview:ActInd];
    [self.av1 show];
    [pool release];
    return; 
}
4

1 に答える 1

2

まず、av1保持されたオブジェクトに設定します。この行を次のように置き換えます。

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sending Message, please wait..." message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];

self.av1 = alert;

[alert release];

第二に、あなたは決して解放しませんActInd[ActInd release]前に追加し[pool release]ます。av1電話をかけたときに保持されるため、これは安全ですaddSubview:

サイドノードで、なぜNSAutoreleasePool?通常、これらは別のスレッドで必要ですが、アクティビティインジケーターの表示はメインスレッドで行う必要があります。

また、規則に従う場合は、に置き換える必要がActIndありますactInd

于 2011-06-04T11:23:44.950 に答える