Parse incrementKey делает приложение iOS аварийно завершающим - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь увеличить на 1 столбец с именем «ThumbsDown» в моей базе данных Parse, но строка кода, в которой я выполняю такое увеличение, заставляет приложение обрабатывать sh. Столбец имеет тип «Number».

PFQuery *downvoteUser = [PFQuery queryWithClassName:@"UserRating"];
[downvoteUser whereKey:@"User" equalTo:PFUser.currentUser.username];

     NSArray *downVote = [downvoteUser findObjects];

     NSLog(@"objectID : %@", [downVote valueForKey:@"objectId"]);
     NSLog(@"ThumbsDown : %@", [downVote valueForKey:@"ThumbsDown"]);

     // Here we update the Rated column in Event Class
     PFObject *CurrentUserThumbsDown = [PFObject objectWithoutDataWithClassName:@"UserRating" objectId:[downVote valueForKey:@"objectId"]];
     [CurrentUserThumbsDown incrementKey:@"ThumbsDown"];

     [CurrentUserThumbsDown save];

Согласно моим тестам:

  • Если я удаляю incrementKey, он не будет аварийно завершать работу; но он ничего не сделает
  • NSLogs фактически возвращают ожидаемые значения, полученные из облака.
  • Я не могу событие распечатать ошибку из сохранения, потому что она терпит крах, прежде чем я могу ее перехватить

Я получаю ошибку cra sh:

2020-01-19 19:25:41.024887+0100 Sporteve[39724:418054] Warning: A long-running operation is being executed on the main thread. 
Break on warnBlockingOperationOnMainThread() to debug.
2020-01-19 19:25:41.025422+0100 Sporteve[39724:418243] -[__NSSingleObjectArrayI length]: unrecognized selector sent to instance 0x600001572ef0
2020-01-19 19:25:41.027731+0100 Sporteve[39724:418243] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSSingleObjectArrayI length]: unrecognized selector sent to instance 0x600001572ef0'

РЕДАКТИРОВАТЬ / СОВЕТ:

  • Если я изменю objectID в PFObject для реального objectId из базы данных, это на самом деле работает, поэтому проблема должна быть в NSArray.

1 Ответ

0 голосов
/ 19 января 2020

Супер просто.

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

PFObject *CurrentUserThumbsDown = [PFObject objectWithoutDataWithClassName:@"UserRating" objectId:[downVote[0] valueForKey:@"objectId"]];

РЕДАКТИРОВАТЬ:

Лучшая идея, представленная в комментариях ниже, состоит в том, чтобы просто получить getFirstObject, и это лучшая идея:

PFObject *CurrentUserThumbsDown = [downvoteUser getFirstObject];
...