Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 等待在应用程序启动时加载数据_Ios - Fatal编程技术网

Ios 等待在应用程序启动时加载数据

Ios 等待在应用程序启动时加载数据,ios,Ios,我对iOS开发还很陌生,并且已经努力完成了一段时间的任务。最终决定寻求帮助 在我让应用程序启动之前,我有一些数据要从互联网上加载。我决定在AppDelegate 这是: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after appl

我对iOS开发还很陌生,并且已经努力完成了一段时间的任务。最终决定寻求帮助

在我让应用程序启动之前,我有一些数据要从互联网上加载。我决定在
AppDelegate

这是:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    // Override point for customization after application launch.

    //loading configuration
    [Configuration downloadConfiguration:^(NSMutableArray *currencies, double refreshIntervalInMilis, double timeDifferenceInMilis, NSError *error)  {
        if (error) {
            //displaying error dialog
        } else {
            //doing some stuff with data loaded          
        }
    }];    

    return YES;
}

很明显,在加载数据之前,该方法将返回YES,因为它不会等待加载数据。我的问题是如何使此方法等待此块完成,然后返回YES(如果配置未正确加载,则返回NO)?

在返回
YES
之前,不要等待数据下载。iOS有一个看门狗守护进程,如果应用程序在30秒内没有启动,它将终止应用程序。因此,如果您的用户的互联网连接非常糟糕,导致下载时间超过30秒,那么您的应用程序将在启动前被杀死

我的建议是使用通知通知所需各方配置的下载。安装程序需要列出的根视图控制器,例如
myapplicationiddownloadconfigurationnotification
,一旦收到该通知,它将重新加载UI或推送依赖于相关配置的其他视图控制器


如果下载失败-更新UI,而不是从委托方法返回
NO
。在所有应用程序启动之后,只是没有幸下载配置。

永远不要等待主线程上的网络访问。只需将代码添加到
downloadConfiguration:

的callback块中,以初始化应用程序其余部分返回的数据。我的建议是添加一个启动屏幕,其中显示正在加载进度条。进度条表示您正在等待下载数据,完成后,您可以显示下一个屏幕。所以在appdelegate.h中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    // Override point for customization after application launch.

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];


    self.splashviewController = [[SplashViewController alloc] init];
    navigationController = [[NavigationController alloc] initWithRootViewController:self.splashviewController];

 self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}
在splashview控制器中,包含代码:

[Configuration downloadConfiguration:^(NSMutableArray *currencies, double refreshIntervalInMilis, double timeDifferenceInMilis, NSError *error)  {
        if (error) {
            //displaying error dialog
        } else {
            //doing some stuff with data loaded          
        }
    }];  

您是从RESTAPI下载的吗

如果是,请使用此轻型库:

它将在后台进行加载