我在看this tutorial在 Xcode 8 中使用 Core Data,视频使用的是 Swift。在视频中,他在 Core Data 模型中输入了一个名为 Task
的实体,然后在代码中他能够调用 Task
,例如:
let task = Task(context: context)
我有一个名为 Tag
的实体。如何使用 Objective-C 在代码中访问 Tag? Codegen 设置在核心数据模型中,但我在我的项目中看不到任何其他文件。如果我尝试:
Tag test = [[Tag alloc] init];
我得到一个错误,提示 Tag
不存在。
最佳答案
如果 Codegen 设置为“类定义”,那么您只需导入实体的 NSManagedObject
子类头文件即可。
导入:
#import "Tag+CoreDataClass.h"
然后您的 Tag
对象的创建将被识别。
Tag *tag = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:[self managedObjectContext];
tag.name = @"Tag Name";
注意:如果您想查看代表您生成的文件,您可以检查项目的 DerivedData 文件夹。您不应编辑这些文件或将它们导入到您的项目中。
类似于:
/Users/{用户名}/Library/Developer/Xcode/DerivedData/{你的项目名称}/Build/Intermediates/{你的项目名称}.build/Debug-iphonesimulator/{你的项目名称}.build/DerivedSources/CoreDataGenerated/{您的项目名称}/
还有其他 Codegen 选项可根据您的用例提供不同的选项:
- 无/手动:允许您自己管理
NSManagedObject
子类。使用此选项,您将看到项目中的文件并可以修改它们。 - 类别/扩展:允许您拥有不想让 Core Data 管理的自定义属性(特性)。
我在这里发布了关于 Codegen 选项的更详细的答案:https://stackoverflow.com/a/40647786/4748172
关于ios - Xcode 8 如何在 Objective-C 中使用核心数据代码生成类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132790/