uiviewanimation State Release. программа аварийно завершает работу - PullRequest
1 голос
/ 04 июня 2011

Приложение вылетает очень редко. Однажды он упал, и я получил следующий отчет:

[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; 
}

1 Ответ

2 голосов
/ 04 июня 2011

Во-первых, вы устанавливаете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...