gpt4 book ai didi

iphone - CoreData一对多和逆关系问题

转载 作者:行者123 更新时间:2023-12-03 18:38:57 25 4
gpt4 key购买 nike

我正在尝试将一组数据导入到 CoreData 持久存储中。这是将在运行时呈现给用户的只读数据。

我有一个名为“类别”的实体,它与名为“项目”的实体具有一对多关系,而“项目”又与类别具有逆关系。

当我将项目添加到上下文时,如何将它们与正确的类别相关联?我可以在 SQLite dB 中看到,它是通过向 Item 表添加 Category 字段来完成的,并且可能使用 Category 主键来建立关系。但PK是在幕后进行的……有没有办法建立联系?

我还在我的 Category 类中看到 CoreData 生成了用于添加项目的方法,但我假设这些都是允许 CoreData 维护关系的幕后方法:

    @interface Category (CoreDataGeneratedAccessors)

- (void)addItemObject:(Item *)value;
- (void)removeItemObject:(Item *)value;
- (void)addItems:(NSSet *)value;
- (void)removeItems:(NSSet *)value;

@end

我在编程指南中读到,CoreData 自动处理关系的另一端,但我无法弄清楚当我添加项目时如何创建到类别的初始链接。

谢谢

jk

最佳答案

有不同的可能性。如果您已经有一个 Category 对象(例如通过 fetch 请求获得),并假设变量

Category *category;
Item *item;

然后您只需执行以下操作:

item.category = category;

[category setValue: category forKey:@"category"];

你就完成了,因为 Core Data 会自动设置逆关系。

如果您没有 Category 对象,或者想要插入新的 Category 对象,请执行以下操作:

// Create a new instance of the entity 
Category *category = (Category *) [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext];
// add all of the category properties, then set the relationship
// for instance set the category name
[category setValue:@"myCategoryName" forKey:@"name"];
[category setValue:item forKey:@"item"];

然后,您可以像以前一样为 Item 对象设置此 Category 对象。最后,Core Data 不会在幕后使用您所展示的方法:这些方法可供您使用,因此您还可以执行以下操作:

[category addItemObject:item];

或相反:

[item addCategoryObject:category];

关于iphone - CoreData一对多和逆关系问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1435006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com