2016-12-14 87 views
4

我在看教程(https://www.youtube.com/watch?v=qt8BNhpEAok)在Xcode 8中使用核心数据,并且视频使用了Swift。他进入一个名为任务实体的核心数据模型,然后在代码中,他能够调用任务,如:Xcode 8如何在Objective-C中使用核心数据代码Gen类?

let task = Task(context: context) 

我所说的“标签”的实体。我如何使用objective-c访问代码中的代码? CodeGen在核心数据模型中设置,但我没有在我的项目中看到任何其他文件。如果我尝试

Tag test = [[Tag alloc] init]; 

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

+0

如果你在你的项目中打开你的'xcdatamodeld'文件,并选择你的“标签”的实体,什么是所选择的代码生成选项?如果它被设置为“manual/none”,那么当你构建你的项目时,NSManagedObject的子类将不会被生成。 –

+0

如果它被设置为“类定义”,那么当您构建项目时将为您生成“NSManagedObject”子类,但它们不会显示在您的项目中。 –

+0

@RyanH。它被设置为“Class Defintion”。如果它在项目中,我如何访问它们?我在选项中选择了全局命名空间,所以我想我可以只说标签并将它显示为一个类。我需要在头文件中导入一些东西吗? – SolidSnake4444

回答

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

  2. 通过选择菜单树'编辑器' - >'创建NSManagedObject子类...' 然后按照说明生成任务的源代码。

'标签+ CoreDataClass.h'

'标签+ CoreDataClass.m'

'标签+ CoreDataProperties.h'

'标签+ CoreDataProperties.m'

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

  1. 导入头文件。

#import "Tag+CoreDataProperties.h"

  • 然后创建 '标签' 类。
  • NSManagedObjectContext* wContext = ((AppDelegate*)UIApplication.sharedApplication.delegate).persistentContainer.viewContext; Tag* w Tag = [ [ Tag alloc ] initWithContext: wContext ]; wTag.name = @"TEST";

    +0

    这是否将标签直接插入数据库? initWithContext行。 – SolidSnake4444

    +0

    我最终不需要做第2步。我需要的魔法是第3步,我不知道那个课程是创建的。我猜第2步可能会让它出现在项目中。第4步确实将标签插入到数据库中,所以一切都按照我认为的方式工作。谢谢。 – SolidSnake4444

    4

    如果代码生成被设置为“类定义”,然后你可以导入实体NSManagedObject子头文件。

    导入:

    #import "Tag+CoreDataClass.h" 
    

    那么你Tag对象的创建将被识别。

    Tag *tag = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:[self managedObjectContext]; 
    tag.name = @"Tag Name"; 
    

    注:如果你想看到代表您生成的文件,你可以检查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}/

    有迹象表明,提供取决于你的使用情况不同选择其他代码生成选项:

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

    我张贴关于代码生成选择这里更详细的解答:https://stackoverflow.com/a/40647786/4748172