Background Fetch iOS UIBackgroundFetchResult нераспознанный селектор

Я слежу за AppCoda: Работа с Фоновым Программированием и получением некоторых ошибок. Я уже создал базовое приложение, которое может отображать таблицу с данными из ее источника, а также UIRefreshControl работает хорошо.

Затем я начал создавать процесс фонового извлечения. Я уже включаю его фоновые возможности, устанавливаю минимальный интервал времени в appDelegate и внедряю application:performFetchWithCompletionHandler: метод.

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    MyTableViewController *viewController = (MyTableViewController *)self.window.rootViewController;
    [viewController fetchNewDataWithCompletionHandler:^(UIBackgroundFetchResult result) {
        completionHandler(result);
    }];
}

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

[UINavigationController fetchNewDataWithCompletionHandler:]: unrecognized selector sent to instance 0x7fb99280b800

Это мое fetchNewDataWithCompletionHandler:

- (void)fetchNewDataWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    XMLParser *xmlParser = [[XMLParser alloc] initWithXMLURLString:NewsFeed];
    [xmlParser startParsingWithCompletionHandler:^(BOOL success, NSArray *dataArray, NSError *error) {
        if (success) {
            NSDictionary *latestDict = [dataArray objectAtIndex:0];
            NSString *latestTitle = [latestDict objectForKey:@"title"];

            NSDictionary *existingDict = [self.arrNewsData objectAtIndex:0];
            NSString *existingTilte = [existingDict objectForKey:@"title"];

            if ([latestTitle isEqualToString:existingTilte]) {
                completionHandler(UIBackgroundFetchResultNoData);
                NSLog(@"No new data found");
            }
            else {
                [self performNewFetchedDataActionsWithDataArray:dataArray];
                completionHandler(UIBackgroundFetchResultNewData);
                NSLog(@"New data was fetched");
            }
        }
        else {
            completionHandler(UIBackgroundFetchResultFailed);
            NSLog(@"Failed to fetch");
        }
    }];
}

Я не знаю, что здесь происходит, что случилось с моим fetchNewDataWithCompletionHandler?. Любая помощь будет оценена. Спасибо.

1 ответ

Решение

Вам нужно установить ваш viewController как rootViewController

MyTableViewController *viewController = [[MyTableViewController alloc] init];
self.window.rootViewController = viewController;

Затем настройте tableView:cellForRowAtIndexPath: для поддержки идентификатора ячейки в очереди.

static NSString *cellIdentifier = @"cellIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}

Дайте мне знать, если это работа.

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