Удалить объект из отношения один ко многим

Две сущности:

  • Notification
  • User

User имеет атрибут с именем username

Есть один ко многим relationship между User << ---> Notification называется "пользователи"

E сть Notification объект (ObjectA) сохранен, который имеет (2) UserОбъекты, сохраненные в отношениях "пользователи". Я хотел бы обновить ObjectA, удалив один из User объект в отношениях "пользователей".

User У сущности есть атрибут с именем "username".

Есть (2) User'Если у меня есть имя пользователя "UserA" и "UserB" в качестве объектов в отношениях "пользователи", как я могу удалить "UserA"?

Вот то, что я придумал, и это не работает:

NSFetchRequest *notificationRequest = [[NSFetchRequest alloc] initWithEntityName:@"Notification"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"notification_id == %@", [selectedManagedObject valueForKey:@"notification_id"]];
[self.managedObjectContext executeFetchRequest:notificationRequest onSuccess:^(NSArray *results) 
{
   //Since I'm fetching based on objectID, there should always be one Object.
    Notification *notificationObject = [results objectAtIndex:0];
    NSArray *usersArray = [NSArray alloc]init];

             //I don't think the code below is correct?  

    usersArray =  [notificationObject valueForKey:@"users"];

    for (User *user in userArray)
    {
        if (user.username == @"UserA")
        {
             [self.managedObjectContext deleteObject:user];
             [self.managedObjectContext saveOnSuccess:^{
         } onFailure:^(NSError *error) {
          }];

     } onFailure:^(NSError *error) {

     }];

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

Каков наилучший способ удалить объект "UserA" из отношений?

1 ответ

Если при удалении объекта "Пользователь" также удаляется связанный объект "Уведомление", вы, вероятно, установили "Правило удаления" для отношения от "Пользователь" до "Уведомление" и "Каскад". Вместо этого вы должны установить его на "Nullify".

Обратите внимание, что сравнение строк

if (user.username == @"UserA")

это неправильно, это должно быть

if ([user.username isEqualToString:@"UserA")

Это, однако, не объясняет, почему объект "Уведомление" удаляется.

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