Подтвердить что ты не робот

На главном потоке выполняется длительная работа Parse

Я получаю сообщение об ошибке:

"В основном потоке выполняется долго работающая операция синтаксического анализа. Перерыв на warnParseOperationOnMainThread() для отладки."

и

"Перерыв на warnParseOperationOnMainThread() для отладки."

Я не могу найти ошибку в моем коде. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

PFQuery *query = [PFQuery queryWithClassName:@"User"];
[query getObjectInBackgroundWithId:[[PFUser currentUser] objectId] block:^(PFObject *object, NSError *error) {

    self.firstName = object[@"firstname"];
    self.lastName = object[@"lastname"];

    self.nameLabel.text = [[NSArray arrayWithObjects:self.firstName, self.lastName, nil] componentsJoinedByString:@" "];
}];
4b9b3361

Ответ 1

Это нежное предупреждение разработчикам, когда они вызывают вызовы Parse, которые блокируют основной поток.

Здесь вы можете увидеть все это, добавьте символическую точку останова на warnBlockingOperationOnMainThread, только если вы используете API-интерфейс Parse, выпущенный с 2015 года. В противном случае поставьте его на warnParseOperationOnMainThread.

Он будет разбит на эту функцию во время запуска вашего кода и покажет вам трассировку стека, которая поможет вам найти функцию блокировки.

См. изображения ниже, чтобы лучше понять.

enter image description here

enter image description here

Ответ 3

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

Ответ 4

Может быть, это немного поздно, но здесь вы идете. Я думаю, проблема связана с тем, что вы пытаетесь получить выборку объектов одновременно:

[[PFUser currentUser] objectId];

и:

 [query getObjectInBackgroundWithId...];

Лучше сначала получить userId, например:

//First fetch and store the id in a string so you can reuse it whenever you want
NSString *userId = [PFUser currentUser].objectId; 

Второе:

  // Do your second fetch here:          
  PFQuery *query = [PFQuery queryWithClassName:@"User"];        

 [query getObjectInBackgroundWithId:userId block:^(PFObject *object, NSError *error) {

 self.firstName = object[@"firstname"];
 self.lastName = object[@"lastname"];

 self.nameLabel.text = [[NSArray arrayWithObjects:self.firstName, self.lastName, nil]    componentsJoinedByString:@" "];
 }];

Et voila!