Программное удаление данных, связанных с PFUser.objectID, если PFUser удален

Поэтому в своем приложении я использую Parse для учетных записей пользователей. У меня есть класс «Follow» с полями «to» и «from», содержащими идентификаторы пользовательских объектов, что позволяет пользователям следить друг за другом. Теперь, если я каким-то образом удалю пользователя, отношение следования останется в силе, а запрос пустых пользовательских данных вызовет ошибку «объект не найден». Что я хочу знать, так это то, как я могу удалить отношение следования, если какое-либо из полей «кому» или «от» содержит objectID несуществующего объекта.

Я пробовал запрашивать объекты по их идентификатору объекта, но любая попытка проверки пустых данных (например, проверка того, является ли user.username нулевым) привела к ошибке отсутствия объекта, и я не могу проверить, является ли объект нулевым, потому что Xcode говорит об этом никогда не будет.

Спасибо!


person NotMe    schedule 08.01.2016    source источник
comment
вы вручную удаляете пользователя?   -  person Jaimish    schedule 08.01.2016
comment
да, но я спрашивал на всякий случай, если захочу реализовать метод deleteUser(). Но я предполагаю, что в этом случае я мог бы удалить любые связанные отношения отслеживания перед удалением пользователя. Так что мне, наверное, не стоит беспокоиться об этом, верно?   -  person NotMe    schedule 08.01.2016
comment
для этого вам нужно использовать облачный код..... реализовать триггер перед удалением   -  person Jaimish    schedule 08.01.2016


Ответы (1)


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

PFQuery * _to = [PFQuery queryWithClassName:@"Follow"];
[_to whereKey:@"to" equalTo:@"Replace UserID of Deleted User"];

PFQuery * _from = [PFQuery queryWithClassName:@"Follow"];
[_from whereKey:@"from" equalTo:@"Replace UserID of Deleted User"];

PFQuery *query = [PFQuery orQueryWithSubqueries:@[_to, _from]];
[query findObjectsInBackgroundWithBlock:^(NSArray *results, NSError *error) {
  if (!error) {
     // The find succeeded.
     NSLog(@"Successfully retrieved %d relations.", results.count);
     // Do something with the found objects, lets delete them all to intact relationship
     [PFObject deleteAllInBackground:results];
 } else {
     // Log details of the failure
     NSLog(@"Error: %@ %@", error, [error userInfo]);
 }
}];

Перейдите по этой ссылке для получения подробного описания и информации:
Разбор составных запросов

person Aamir    schedule 08.01.2016