【问题标题】:Delete an object from one-to-many relationship从一对多关系中删除对象
【发布时间】:2013-10-22 03:37:13
【问题描述】:

两个实体:

  • Notification
  • User

User 有一个名为username 的属性

User 之间存在一对多的relationship Notification 称为“用户”

保存了一个Notification 对象(ObjectA),它在“用户”关系中保存了(2) 个UserObjects。我想通过删除“用户”关系中的 User 对象之一来更新 ObjectA。

User 实体有一个名为“用户名”的属性。

有(2)User's 用户名“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”对象的最佳方法是什么?

【问题讨论】:

  • 这在什么方面不起作用?
  • 不只是从用户关系中删除 UserA 对象,而是删除整个 Notification 对象。

标签: ios core-data one-to-many


【解决方案1】:

如果删除“用户”对象也会删除相关的“通知”对象, 那么您可能已经为从“用户”到“通知”到“级联”的关系设置了“删除规则”。您应该将其设置为“Nullify”。

还要注意字符串比较

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

错了,应该是

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

但这并不能解释为什么“通知”对象被删除。

【讨论】:

  • 谢谢。我验证并为“无效”设置了“删除规则”。请参阅编辑。
  • 还有。我应该有反向关系吗?
  • @user1107173:您的代码中有错误(请参阅更新的答案)。但这并不能解释 Notification 对象被删除的原因。 - 是的,您应该始终定义反向关系。
  • @user1107173:您的屏幕截图显示了从通知到用户的关系。我的回答是关于从用户到通知的关系!
  • 你是对的。通知与用户有关系,称为用户。一个通知对象在用户关系中可以有多个用户,至少我是这么理解的。
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多