0

我有以下担忧..

我的应用程序第一次启动时会下载 6 MB 的数据。在该过程中UIView,会显示有关正在进行的下载的信息,并且通常不会与用户进行交互。

因此,我在主 UI 线程中使用 下载所有数据dispatch_async,但现在我不知道这是否是最好的解决方案,以及 Apple 在我提交申请时会说什么。

你能指导我这是否可以吗?

更新
调度代码

//Called at the end of [UIViewController viewDidLoad]
-(void)splashScreenAppeared
{
myTabBarController_.loadingLabel.text = NSLocalizedString(@"Checking for updates",@"launch progress");
dispatch_queue_t d_queue = dispatch_get_main_queue();
[self launchActionCheckIfDataIsStored:d_queue];
}
//...
-(void)launchActionCheckIfDataIsStored:(dispatch_queue_t)queue
{
dispatch_async(queue, ^ {
    //If there is no data stored in core data then download xml data files and images
    if (![self isAnyDataStoredInCoreData]) {
        launchNoDataStored_ = YES;
        [self launchDownloadData:queue];
    } else {
        launchNoDataStored_ = NO;
        [self launchCheckNewVersion:queue];
    }

});
}
//...
-(void)launchDownloadData:(dispatch_queue_t)queue
{        
myTabBarController_.loadingLabel.text = NSLocalizedString(@"Downloading catalog data",@"launch progress");
dispatch_async(queue, ^ {
    [self loadMenuData];
    if (seriousError_) {
        [self launchSeriousError:queue];
        return;
    }

    myTabBarController_.loadingLabel.text = NSLocalizedString(@"Downloading products details",@"launch progress");
    dispatch_async(queue, ^ {
        [self loadProductsData];
        if (seriousError_) {
            [self launchSeriousError:queue];
            return;
        }
//...
//And so on with other parts of download
}
4

2 回答 2

0

只是为了设置背景,我已经编写并提交了 2 个成功的应用程序到 App Store,所以你知道我不是在假设。

回来,您可以将下载推送到后台线程并以滑块的形式更新进度(为了用户的利益)。但是,如果在这种情况下,用户无论如何都不能做任何事情,那么就没有意义了。

另外,我认为 Apple 不会仅仅因为这个而拒绝您的应用程序。他们检查的主要事情之一是您是否使用任何私有 API 或更基本的东西,例如应用程序崩溃。所以继续提交应用商店审核...

于 2012-12-01T12:47:12.887 回答
0

现在我知道 UI Thread 中的网络通信可能是 Apple 拒绝您的应用程序的一个很好的理由。

考虑以下场景:

  • 应用程序适用于 iPhone。
  • 没有与用户的交互。
  • 应用程序在 iPad 上运行!!

即使没有与用户交互,当用户在 iPad 上按下2x按钮时,应用程序也不会做出反应。

所以 UI 线程中的网络通信是有效的,但如果申请不是仅适用于 iPad,那么申请将在 Apple 审核过程中被拒绝。

于 2013-03-19T08:51:48.997 回答