Xcode 8如何在Objective-C中使用核心数据代码生成类?

Sol*_*444 6 xcode core-data objective-c ios xcode8

我正在观看本教程,在Xcode 8中使用Core Data,视频使用的是Swift.在视频中,他进入Task了核心数据模型中命名的实体,然后在他能够调用的代码中Task:

let task = Task(context: context)
Run Code Online (Sandbox Code Playgroud)

我有一个叫做的实体Tag.如何使用Objective-C在代码中访问Tag?Codegen在Core Data模型中设置,但我在项目中看不到任何其他文件.如果我尝试:

Tag test = [[Tag alloc] init];
Run Code Online (Sandbox Code Playgroud)

我收到一个Tag不存在的错误.

Rya*_* H. 5

如果将Codegen设置为"类定义",则只需导入实体的NSManagedObject子类头文件即可.

进口:

#import "Tag+CoreDataClass.h"
Run Code Online (Sandbox Code Playgroud)

然后Tag将识别您的对象的创建.

Tag *tag = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:[self managedObjectContext];
tag.name = @"Tag Name";
Run Code Online (Sandbox Code Playgroud)

注意:如果要查看代表您生成的文件,可以检查项目的DerivedData文件夹.您不应编辑这些文件或将它们导入项目中.

就像是:

/Users/{Username}/Library/Developer/Xcode/DerivedData/{Your Project Name}/Build/Intermediates/{Your Project Name}.build/Debug-iphonesimulator/{Your Project Name}.build/DerivedSources/CoreDataGenerated/{Your Project Name}/

还有其他Codegen选项,根据您的使用情况提供不同的选项:

  • 无/手动:允许您自己管理NSManagedObject子类.使用此选项,您将看到项目中的文件,您可以修改它们.
  • 类别/扩展:允许您拥有不希望Core Data管理的自定义属性(属性).

我在这里发布了一个关于Codegen选项的更详细的答案:https://stackoverflow.com/a/40647786/4748172


Sat*_*ito 3

  1. 在模型编辑器中选择实体“标签”。

  2. 通过选择菜单树“编辑器”->“创建 NSManagedObject 子类...”来生成任务的源代码,然后按照说明进行操作。

'标签+CoreDataClass.h'

'标签+CoreDataClass.m'

'标签+CoreDataProperties.h'

'标签+CoreDataProperties.m'

文件将被创建并自动附加到您的项目中。

  1. 导入头文件。

    #import "Tag+CoreDataProperties.h"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后创建“标签”类。

    NSManagedObjectContext *wContext = ((AppDelegate *)UIApplication.sharedApplication.delegate).persistentContainer.viewContext;
    Tag *wTag = [[Tag alloc] initWithContext:wContext];
    wTag.name = @"TEST";
    
    Run Code Online (Sandbox Code Playgroud)