【问题标题】:COREDATA: Add add values to one to many releationship核心数据:为一对多关系添加值
【发布时间】:2025-11-29 15:15:01
【问题描述】:

我有一个 coredata 项目:

这里我有 3 个实体:a)类别,b)内容,c)标签。我已经添加了类别值,但是当用户选择了他想要内容的类别时,我无法弄清楚如何在内容实体中设置类别。

非常感谢您的帮助

【问题讨论】:

  • 内容 如果您想将多个类别分配给单个内容,则类别应该是多对多关系。标签也一样。除了在 CoreData 中,您还以单数形式命名实体,例如类别应该是类别。然后当你有关系时,每个类别都会有内容(很多),每个内容都会有“类别”和“标签”(又很多)。您需要反向关系,这将允许您获取特定类别的所有内容。所有这些都可以在关系字段的 CoreData 实体属性的右侧栏中进行设置。
  • @Andy,如果是类别,每个内容我只需要一个类别。我不确定您的意思是“您需要反向关系,这将允许您获取特定类别的所有内容。”。你能提供和例子吗?
  • [yourContent setValue:yourCategory forKey:@"category]!?!
  • @AminNegm-Awad,我试过了,没用
  • 如果您正确设置了关系,那么您将使用为您动态创建的访问器方法 (developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…) 您的内容 CoreData 对象将具有类似于 - (void)setCategory:(Category *)category; 的方法 - 您只需需要声明它以便访问

标签: objective-c core-data


【解决方案1】:

我知道如何将类别添加到内容中:

    NSError *error = nil;
    NSManagedObjectContext *moc = [self managedObjectContext];
    NSEntityDescription *contentDescription = [ NSEntityDescription entityForName:@"Categories" inManagedObjectContext:moc];

    NSFetchRequest *categoRequest = [NSFetchRequest new];
    categoRequest.entity = contentDescription;
    NSPredicate *categoPredicate = [NSPredicate predicateWithFormat:@"category like %@", _dropMenuOulet.stringValue];
    categoRequest.predicate = categoPredicate;

    NSArray *results = [moc executeFetchRequest:categoRequest error:&error];



    Categories *catego = (Categories*) [results objectAtIndex:0];
Content *content1 = [NSEntityDescription insertNewObjectForEntityForName:@"Content" inManagedObjectContext:moc];

    content1.category = catego;
    content1.title = _titleOutlet.stringValue;
    content1.body = _bodyOutlet.stringValue;

但现在我正试图弄清楚如何将标签添加到内容中。

【讨论】: