2013-10-02 5 views
0

Впервые я создал приложение данных с основными данными. Он работает хорошо. Я создал все свои объекты с данными с помощью веб-службы (с AFNetworking). Все мои объекты построены. Итак, теперь я хочу знать, что является лучшим способом предварительной загрузки данных. (Вебсервис> Основные данные> Мои взгляды) На данный момент, это просто, но совсем не удобно, и что это:Как предварительно загрузить данные с данными ядра

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [ManagedMember loadDataFromWebService]; 
    [ManagedLesson loadDataFromWebService]; 
    [ManagedThematic loadDataFromWebService]; 
    [ManagedNew loadDataFromWebService]; 
    [ManagedProject loadDataFromWebService]; 

    return YES; 
} 

loadDataFromWebService является функцией называющий двух последовательных функций. (Удалите все данные в объектах основных данных и заново создайте объекты, которые хорошо работают) Итак, я хочу знать, где я могу назвать эти 5 функций? Возможно ли иметь загрузчик в заставке, как и многие приложения для iOS? Или создано промежуточное представление, которое загружает данные.
Большое спасибо.

+0

Вы не можете предварительно загружать данные в метод «didFinishLaunchingWithOptions», я думаю, вы должны поместить этот код в свой метод viewviewDoadLoad вашего rootviewcontroller. –

+0

Да, я попробовал, но он перезагружает данные каждый раз, когда вы идете в точку зрения. – Benjamin

+0

Вы можете сделать это в viewDidLoad (или другом методе), но вы захотите установить флаг, чтобы он не пытался снова загружать данные. Если эти данные загружаются только один раз во время загрузки * очень первой *, установите флаг в NSUserDefaults. В противном случае, если он вызывается один раз при каждом открытии приложения, просто установите BOOL и проверьте его, чтобы убедиться, что он не вызван снова. – Ryan

ответ

0

Никогда, никогда, никогда, никогда не загружайте данные, подобные этому, в didFinishLaunchingWithOptions:. Этот метод должен сделать минимально необходимый и затем вернуться, как можно быстрее. Включение медленного материала может привести к плохому пользовательскому опыту, и iOS может принудительно закрыть приложение, если он не выйдет из этой функции достаточно быстро.

Как предлагает D-eptdeveloper, viewDidLoad - лучшее место для запуска кода загрузки, но оно по-прежнему не очень велико. В идеале вы запускаете загрузку данных где-то в начале приложения, а отдельные контроллеры представлений просто запрашивают данные по мере необходимости (при том понимании, что данные могут быть недоступны еще, и поэтому может потребоваться показать какой-то индикатор прогресса).

Подходящее место/время для запуска загрузки данных после того, как пользовательский интерфейс был показан пользователю. Это уменьшает потенциальную проблему, при которой запуск загрузки данных в более раннее время фактически замедляет появление пользовательского интерфейса (не очень хороший пользовательский интерфейс).

+1

Кроме того, длительное время запуска может привести к тому, что ваше приложение будет отклонено во время процесса загрузки из Xcode с сообщением «сторожевого таймера», аналогичным «ваше приложение слишком много запускает». Это первая проверка, которая выполняется как первая часть всего процесса обзора. – Leonardo

+0

Итак, как я могу начать загрузку данных где-то раньше в приложении? Это мой вопрос. Но да, в 'viewDidLoad' - это решение. @occulus – Benjamin

+0

@Benjamin Добавил комментарий к моему ответу. – occulus

0

Это нормально для запуска синхронизации в AppDelegate (в методе applicationDidBecomeActive:), потому что это первое место, где выполняется ваш код. Просто убедитесь, что вы выполняете синхронизацию в фоновом потоке.

Эта тема довольно общая, но вы можете найти хорошие примеры о стратегиях синхронизации в Интернете, например. How To Synchronize Core Data with a Web Service – Part 1.

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