Исключение при получении пользовательских данных parse.com в iOS 8 Today Extension

Я пытаюсь получить список PFObjects PFUser для отображения в виджете iOS 8 Today.

После этого сообщения в блоге by Parse, я включил одни и те же группы приложений и общий доступ к связке ключей как в своем основном приложении, так и в расширении в Xcode.

Я также включил следующее в AppDelegate моего основного приложения и viewDidLoad моего расширения Today:

[Parse enableLocalDatastore];
[Parse enableDataSharingWithApplicationGroupIdentifier:@"group.com.me.myapp" containingApplication:@"com.me.myapp"];
[Parse setApplicationId:@"myAppId" clientKey:@"myClientId"];

В widgetPerformUpdateWithCompletionHandler я построил и выполнил свой запрос:

- (void) widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
      PFQuery *query = [PFQuery queryWithClassName:@"Note"];
      [query whereKey:@"User" equalTo:[PFUser currentUser]];

      [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
         if (!error)
         {
            // check for difference between current and new data
            if([self hasNewData:objects]) {
                // fresh data
                notes = objects;
                [self.tableView reloadData];
                [self updatePreferredContentSize];
                completionHandler(NCUpdateResultNewData);
            } else {
                // Data is the same
                completionHandler(NCUpdateResultNoData);
            }
         } else {
            // Failed
            completionHandler(NCUpdateResultFailed);
         }
      }];
    }
}

Первая загрузка работает нормально - я могу получить свой список PFObjects. Однако всякий раз, когда расширение перезагружается во второй раз, возникает следующее исключение: enableDataSharingWithApplicationGroupIdentifier:containingApplication:' must be called before 'setApplicationId:clientKey'' при вызове enableDataSharingWithApplicationGroupIdentifier в viewDidLoad.

Я могу воспроизвести эту перезагрузку, проведя Центр уведомлений на вкладку «Уведомления» и проведя его обратно, что приведет к повторному вызову viewDidLoad.

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

Любые идеи? Заранее спасибо!


person Ken Toh    schedule 15.06.2015    source источник


Ответы (1)


Попробуй это

if(![Parse isLocalDatastoreEnabled]) {
    [Parse enableLocalDatastore];
    [Parse enableDataSharingWithApplicationGroupIdentifier:@"group.com.me.myapp" containingApplication:@"com.me.myapp"];
    [Parse setApplicationId:@"myAppId" clientKey:@"myClientId"];
}
person Sandr    schedule 25.06.2015
comment
Убедитесь, что Parse инициализируется только один раз в расширении, чтобы смягчить сбой. Однако состояние [PFUser currentUser] теперь остается неизменным при входе или выходе из основного приложения. - person Ken Toh; 27.06.2015
comment
Не могли бы вы предоставить свой код, где вы используете PFUser? - person Sandr; 28.06.2015
comment
Я получаю доступ к [PFUser currentUser] сразу после описанных выше шагов инициализации в viewDidLoad моего расширения. - person Ken Toh; 28.06.2015
comment
Получаете ли вы PFUser из LocalDatastore в своем расширении? Меняли ли вы закрепленный PFUser при выходе\входе в основное приложение? - person Sandr; 30.06.2015
comment
Нет, я не получаю PFUser из своего локального хранилища данных. Согласно документам на parse.com/docs/ios/guide#extensions -shared-local-data, текущий PFUser должен сохраняться в приложениях, поэтому я ожидал, что синхронизация будет бесшовной, без какой-либо формы ручного закрепления или извлечения. Я также не изменил закрепленного PFUser при входе в приложение и выходе из него. - person Ken Toh; 30.06.2015
comment
Вы, сэр, только что сделали мой день, эта проблема сводила меня с ума! - person sachadso; 04.12.2015
comment
Wowowowo Спасибо человек! Я очень мучился с этим дурацким багом. - person Perjan Duro; 07.01.2016