Как я могу гарантировать, что моя функция обновления данных UITableView вызывается только один раз, когда приложение отображается снова (из фонового запуска или запуска)? - PullRequest
0 голосов
/ 06 июня 2011

Как я могу гарантировать, что моя функция табличных данных вызывается только один раз, когда приложение отображается снова (из фонового запуска или запуска)?

То есть, я хочу, чтобы данные моей таблицы обновлялись, когда пользователь нажимает на значок приложения, и только один раз. Таким образом, требование будет: а) метод обновления в контроллере вызывается только один раз после нажатия пользователем значка приложения b) быть действительным независимо от того, запускает ли пользователь (i) приложение в первый раз, (ii) возвращается из фона, (iii) любые другие средства пользователя, запрашивающего приложение, возвращаются на передний план.

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

- (void)updateEventData {
    // UPDATE CODE HERE
}
- (void)becomeActive:(NSNotification *)notification {
    [self updateEventData];
    [self.tableView reloadData];
}

- (void)viewDidLoad {
    [super viewDidLoad];  
    [self updateEventData];

    // Auto Refresh Data - Handle Case where App becomes active from background & you want to refresh data
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(becomeActive:)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];

}

Ответы [ 3 ]

1 голос
/ 06 июня 2011

Вы можете реализовать это следующим образом:

1) Взять одну переменную в NSUserDefault.2) Установите значение FALSE при первом запуске приложения.3) Получить значение переменной NSUserDefault в соответствующем контроллере представления.И если это значение, если FALSE, тогда вызовите метод обновления.4) Теперь, когда приложение станет активным, установите значение переменной TRUE.5) Получить его значение в соответствующем контроллере представления.И если значение равно TRUE, не вызывайте метод update.6) Итак, метод обновления будет вызываться только один раз.

Надеюсь, он вам пригодится.Может быть, есть небольшие изменения.

Дайте мне знать, если возникнут какие-либо трудности.

0 голосов
/ 06 июня 2011

Как часть написания этого вопроса и рассмотрения ответов, я думаю, что у меня, вероятно, есть хорошее решение ...

  • Создание переменной / свойства экземпляра "initialLoad"
  • Установите значение TRUE первым в viewDidLoad
  • Затем в методе становитесь активным:

Код:

- (void)becomeActive:(NSNotification *)notification {
    if (!self.initialLoad) {
        [self updateEventData];
        [self.tableView reloadData];
    }
    self.initialLoad = false;
}

Кажется, работает нормально ...

0 голосов
/ 06 июня 2011

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

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

    // Override point for customization after application launch.
    [self postNotification];
    [self.window makeKeyAndVisible];

    return YES;
}

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

...