Невозможно показать UIAlertView - PullRequest
2 голосов
/ 16 марта 2011

в моем приложении я использую ключи проверки для загрузки контента с сервера через Wi-Fi. Мне нужно показать UIAlert, если лицензионные ключи неверны или Wi-Fi недоступен. Я написал код для отображения вида предупреждений, но предупреждение не отображается ... Это выбивает кровь из моей головы ... Может кто-нибудь помочь, пожалуйста ... контроль над этой линией, но все же предупреждение не отображается.

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *documentsDirectory=   [[[UIApplication sharedApplication] delegate] applicationDocumentsDirectory];   //[pathToStore objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingFormat:@"packages"];

NSString *packagePath = [NSString stringWithFormat:@"%@/%@", path,isbnTemp];

[recievedData writeToFile:[documentsDirectory stringByAppendingPathComponent:@"file.zip"] atomically:YES];
NSString *zipPath=[documentsDirectory stringByAppendingPathComponent:@"file.zip"];

[fileManager createDirectoryAtPath:documentsDirectory withIntermediateDirectories:NO attributes:nil error:nil];

    ZipArchive *zipArchive = [[ZipArchive alloc]init];

if([zipArchive UnzipOpenFile:zipPath]){

    if([zipArchive UnzipFileTo:packagePath overWrite:YES]){

        [self loadContent];


    }
    else{
        NSLog(@"Unable to UnArchieve the packages");
    }


}
else  {


    NSLog(@"Failure To Open Archive");
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Your ISBN and/or Licence Key are incorrect" message:Nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
    [alert show];
    [alert release];    
}

}

Ответы [ 2 ]

5 голосов
/ 16 марта 2011

Вы пытаетесь показать UIAlertView в методе, который вызывается из потока, отличного от основного потока? Например, если вы пытаетесь отобразить UIAlertView в асинхронном обратном вызове, он может работать в отдельном потоке.

Если это так, вам нужно переместить код, который показывает UIAlertView, в отдельный селектор и вызвать его в главном потоке, используя один из методов performSelectorOnMainThread:.

Например, добавьте следующий метод в ваш класс:

-(void)showAlert {
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Your ISBN and/or Licence Key are incorrect" message:Nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
    [alert show];
    [alert release];
}

А затем измените последнее предложение else в текущем коде, чтобы оно использовало:

[self performSelectorOnMainThread:@selector(showAlert) withObject:nil waitUntilDone:NO];

См. Ссылку на класс NSObject для получения дополнительной информации о performSelectorOnMainThread: методах.

0 голосов
/ 16 марта 2011

После того, как вы создали оповещение, вы можете проверить наличие нулевого указателя в переменной оповещения?Может быть, вам нужно указать сообщение?Кроме этого, я не вижу ничего плохого в опубликованном вами коде.

...