Ipad-NSThread-Error - PullRequest
       1

Ipad-NSThread-Error

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

Для проверки правильности входа в систему, я выбираю данные из веб-сервиса и для отображения хода выполнения я отображаю UIIndicatorView внутри UIAlertView Проблема: во время выполнения при нажатии кнопки «Домой» на устройстве IPad мое приложение закрывается, и во второй раз, когда я пытаюсь запуститьПриложение затем (отображается черный экран) Приложения не запускаются.Как я могу решить эту проблему?

Мой код:

-(NSMutableString*) getLoginMessage:(NSString*) UserName : (NSString *) Password : (NSString *) url

{

[NSThread detachNewThreadSelector:@selector(showAlertMethod) toTarget:self withObject:nil];
@try
{
NSArray *Keys =[[NSArray alloc] initWithObjects:@"LoginName",@"PassWord",nil];
NSArray *KeyValue =[[NSArray alloc] initWithObjects:UserName,Password,nil];
operationName=[[NSString alloc] init];
operationName =@"ClientLogin";
NSURL *WebServiceUrl=[WebServiceHelper generateWebServiceHTTPGetURL:url : operationName :     Keys:     KeyValue];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:WebServiceUrl];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser setDelegate:self];
[parser parse];
[Keys release];
[KeyValue release];
[WebServiceUrl release];
[NSThread detachNewThreadSelector:@selector(dismissAlertMethod) toTarget:self withObject:nil];
}
@catch (NSException * e)
{
[NSThread detachNewThreadSelector:@selector(dismissAlertMethod) toTarget:self withObject:nil];
}
return Result;
}

-(void)showAlertMethod
{
NSAutoreleasePool *pool1=[[NSAutoreleasePool alloc]init];
progressAlert = [[UIAlertView alloc] initWithTitle:@"Signing in..." message:@"Please wait..."    delegate:nil cancelButtonTitle: nil otherButtonTitles:nil];

CGRect alertFrame = progressAlert.frame;
UIActivityIndicatorView* activityIndicator = [[UIActivityIndicatorView alloc]     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

activityIndicator.frame = CGRectMake(135,alertFrame.size.height+75, alertFrame.size.width,30);
activityIndicator.hidden = NO;
activityIndicator.contentMode = UIViewContentModeCenter;
[activityIndicator startAnimating];
[progressAlert addSubview:activityIndicator];
[activityIndicator release];
[progressAlert show];
[pool1 release];
}

-(void)dismissAlertMethod
{
NSAutoreleasePool *pool2=[[NSAutoreleasePool alloc]init];
[progressAlert dismissWithClickedButtonIndex:0 animated:YES];
[pool2 release];
}

1 Ответ

0 голосов
/ 07 июля 2011

Немного сложно прочитать ваш код, но: вы не можете создавать пользовательский интерфейс из потока. Ваше оповещение должно быть создано и показано из основного потока.

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