我有与在模拟器以及一个物理iPhone 4和iPhone 3GS的作品完美的应用程序有问题。 该应用程序被批准,现在在App Store,但是从App Store下载的分布呈现出积聚在开发/发行版本没见过的错误。
这是一个免费的应用程序,而是由当地的广告支持。 当应用程序启动(或从后台返回),在AppDelegate中试图从我们的广告服务器下载一些HTML,如果成功,呈现一个UIWebView一个模式视图控制器和传递一个包含HTML一个NSData变量。 在开发/发行版本,这个完美的作品; 应用程序启动,并在几秒钟后,一个视图滑出并显示广告,可以用一个按钮被解雇。
从App Store但是分布构建是不同的。 当模态视图控制器向上滑动时,UIWebView中从未加载。 请记住,我提出的观点控制器仅如果能够下载广告数据 - 否则,视图是永远不会呈现。
值得庆幸的是我实现的广告视图控制器的定时器,这将导致模态视图驳回本身如果webViewDidFinishLoad永远不会触发(其中定时器无效),所以至少应用程序的用户是不是太恼火。 但它仍然难看有一个空的视图控制器向上滑动,然后滑动离开显然没有理由。
下面是在AppDelegate中的相关方法:
- (void)launchAd
{
[NetworkActivity showFor:@"ad"];
if (!alreadyActive && [ServerCheck serverReachable:@"openx.freewave-wifi.com" hideAlert:YES])
{
alreadyActive = YES;
[self performSelectorInBackground:@selector(downloadAdData) withObject:nil];
}
[NetworkActivity hideFor:@"ad"];
}
- (void)downloadAdData
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *baseURL = @"http://appdata.freewave-wifi.com/ad/";
NSString *file = (IS_IPAD) ? @"ipad.php" : @"iphone.php";
NSURL *adURL = [NSURL URLWithString:[baseURL stringByAppendingString:file]];
adData = [[NSData alloc] initWithContentsOfURL:adURL];
[self performSelectorOnMainThread:@selector(presentAdModal) withObject:nil waitUntilDone:NO];
[pool release];
}
- (void)presentAdModal
{
if (adData)
{
AdViewController *adView = [[AdViewController alloc] initWithNibName:nil bundle:nil];
[adView setAdData:adData];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:adView];
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[tabBarController presentModalViewController:navController animated:YES];
[navController release], navController = nil;
[adView release], adView = nil;
}
else
LogError(@"Not presenting ad; unable to create data object.");
}
顺便说一句,ADDATA以与标头中定义NSData *adData;
该AdViewController只包含一个UIWebView,它装有
[webView loadData:adData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil];
同样,这一切完美的作品,具有开发/发行每次均为建造在模拟器和物理设备 - 只是不从应用商店分发版本。 我甚至已经转换NSData的,以一个NSString和NSLog的与它barfed出()只是为了证明,HTML是模态呈现的AdView之前下载。
[叹...]
编辑1:如果我原来的职位还不清楚,该webViewDidFinishLoad
不会被调用的分布版本(但在开发/发行版本一样)。
编辑2:另外,就在我打电话
[webView loadData:adData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil];
在AdViewController,我添加了一个临时NSLog()
并转换到ADDATA和NSString的它记录到控制台,并且HTML在那里。 所以,一个UIWebView只是拒绝加载NSData的?