2013-03-11 3 views
2

Я довольно новичок в разработке iOS и некоторое время боролся с задачами. Решил в конце концов обратиться за помощью.Ожидание загрузки данных при запуске приложения

У меня есть данные для загрузки из Интернета, прежде чем я разрешу запускать приложение. Я решил использовать didFinishLaunchingWithOptions в 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 до загрузки данных, так как он не ждать, пока данные будут загружены. Мой вопрос: Как мне заставить этот метод дождаться завершения этого блока до того, как я вернусь ДА (или НЕТ, если конфигурация не была загружена должным образом)?

ответ

4

Не дожидаться загрузки данных перед возвратом YES. iOS имеет сторожевого демона, который убивает приложение, если он не запущен через 30 секунд. Поэтому, если у вашего пользователя действительно плохое подключение к Интернету, что приводит к загрузке более 30 секунд - ваше приложение будет убито до его начала.

Я предлагаю использовать оповещения, чтобы уведомлять необходимые стороны о загрузке конфигурации. Для установки необходим контроллер корневого представления, который указан, например, MYApplicationDidDownloadConfigurationNotification, и как только это уведомление получено, он перезагружает пользовательский интерфейс или выталкивает другие контроллеры представлений, которые зависят от соответствующей конфигурации.

В случае неудачной загрузки - обновите пользовательский интерфейс вместо возврата NO из метода делегата. После запуска вашего приложения просто не удавалось загрузить конфигурацию.

1

Никогда не дожидайтесь доступа к сети в основном потоке. Просто добавьте код для инициализации остальной части вашего приложения для возвращаемых данных, в блок обратного вызова downloadConfiguration:

1

Мое предложение: вы добавляете заставку, где показывает, что она загружается с индикатором выполнения. Индикатор выполнения показывает, что вы ожидаете, что данные будут загружены, и когда это будет сделано, вы можете отобразить следующий экран. Так что в вашем 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   
     } 
    }]; 
-1

вы скачиваете из REST API?

если да использовать этот легкий вес LIB: JNRestClient

И он будет делать загрузку в фоновом режиме

Смежные вопросы