iOS: обновление данных, когда приложение выводится на передний план

Я получаю данные с сервера через JSON и отображаю их на ярлыках. Я добавил этот метод в viewDidLoad.

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

Я попробовал метод viewDidAppear, но по какой-то причине он не выполняется.

-(void)viewDidAppear{
        NSLog(@"Called viewDidAppear");
}

Это никогда не называется. Я пытался свернуть приложение, но оно не сработало.

4 ответа

Решение

Я следовал этому руководству - http://leejon.es/notifying-a-viewcontroller-with-uiapplicationdidbecomeactivenotification/

Сначала прикрепите к уведомлению в методе viewWillAppear целевого контроллера представления:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver: self
                                             selector: @selector( appActivated: )
                                                 name: UIApplicationDidBecomeActiveNotification
                                               object: nil];

}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self ];
}


- (void)appActivated:(NSNotification *)note
{
    [self update];
}

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

UIApplicationDidBecomeActiveNotification
UIApplicationWillEnterForegroundNotification

Вы можете использовать ответить на уведомление, как это.

[[NSNotificationCenter defaultCenter] addObserverForName: UIApplicationDidBecomeActiveNotification object: nil queue: [NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
    // LOAD JSON
}];

ViewDidAppear: метод принимает параметр bool, когда представление отображалось с отсутствующей анимацией. Также вам нужно вызвать реализацию суперкласса:

- (void)viewDidAppear:(BOOL)animated
{
   [super viewDidAppear: animated];
   NSLog(@"Called viewDidAppear");
}

В вашей реализации делегата приложения есть метод, который называется:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

Этот метод вызывается при каждом запуске приложения, поэтому я думаю, что он соответствует вашим потребностям. Если вы разместите здесь свой код, он должен работать.

Кроме того, имейте в виду, что вы не должны выполнять синхронный вызов здесь, потому что вы задержите запуск приложения.

РЕДАКТИРОВАТЬ: этот метод будет вызываться только при запуске приложения. Вы можете разместить свой код внутри метода и вызвать его из приложения didFinishLaunchingWithOptions, а затем также вызвать его из метода:

- (void)applicationWillEnterForeground:(UIApplication *)application;

Этот метод будет вызываться, когда приложение выходит на передний план, но не после первого запуска, поэтому будьте осторожны.

Я также думаю, что вы должны проверить методы UIApplicationDelegate со страницы разработчика Apple: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html Кроме того, проверьте изменения состояния приложения: http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

Другие вопросы по тегам