无法显示UIAlertView

时间:2011-03-16 14:42:45

标签: iphone ipad uialertview

在我的应用程序中,我使用验证密钥从使用Wi-Fi的服务器下载内容。如果许可证密钥错误或wi-fi不可用,我需要显示UIAlert。我已经写了一个显示警报视图的男女同校,但警报没有显示......这让我的脑子里流下了鲜血......任何人都可以帮忙......控制权正在越过这条线,但仍然是警报未显示。

-(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 个答案:

答案 0 :(得分:5)

您是否尝试在从主线程以外的线程调用的方法中显示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];

有关performSelectorOnMainThread:方法的详情,请参阅NSObject class reference

答案 1 :(得分:0)

创建警报后,您可以检查警报变量中的NULL指针吗? 也许你需要指定一条消息?除此之外,我发现您发布的代码没有任何问题。