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があなたのアプリを拒否することはないと思います。彼らがチェックする主なことの1つは、プライベートAPIや、アプリのクラッシュなどのより基本的なものを使用しているかどうかです。さあ、APPストアのレビューを送信してください...

于 2012-12-01T12:47:12.887 に答える
0

これで、UI スレッドでのネットワーク通信が、Apple によるアプリケーションの却下の正当な理由になる可能性があることがわかりました。

次のシナリオを検討してください。

  • アプリケーションはiPhone用です。
  • ユーザーとのやり取りはありません。
  • アプリケーションはiPadで実行されます!!

ユーザーとのやり取りはありませんが、ユーザーがiPad で2xボタンを押しても、アプリケーションは反応しません。

そのため、UI スレッドでのネットワーク通信は機能しますが、申請が iPad 専用でない場合、Apple の審査プロセスで申請が却下されます。

于 2013-03-19T08:51:48.997 に答える