- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我从编码中休息了几个月,然后回来发现 CoreData 与 Xcode8/iOS10/macOS Sierra 的变化。
我一直试图了解 Objective C 中新的 NSManagedObject 子类生成,但网络上几乎没有。在我开始屠杀我的项目并将事情完全搞砸之前,我需要澄清一些事情,但是 首先,我从四处闲逛中发现的一些东西这可能对其他人有用......
东西在哪里
自动生成的文件深埋在 DerivedData 文件夹中。查看 USER->Library->Developer->Xcode->DerivedData->ProjectName-lotsOfRandomLetters->Build 然后继续打开文件夹,直到找到 DerivedSources->CoreDataGenerated。
自动生成的文件不会出现在您的项目文件夹或导航器中,但如果其中一个 Xcode 出现错误,则会为您显示源。
Xcode 生成的东西
共有三种代码生成设置 - 手动/无、类定义和类别/扩展。
当实体代码生成设置为手动/无(这是旧行为)时,使用 Editor-> Create NSManagedObject Subclass 创建 NSmanagedObject 子类会在您的项目中生成 4 个文件...
Entity+CoreDataClass.h 和 Entity+CoreDataClass.m 和
Entity+CoreDataProperties.h 和 Entity+CoreDataProperties.m
(上一版 Xcode 7 生成的 Entity.h、Entity.m、
Entity+CoreDataProperties.h 和 Entity+CoreDataProperties.m 文件)
如果实体的 codegen 设置为 Class Definition,Xcode 会在派生数据文件夹中自动生成这 4 个相同的文件 - 而不是项目,然后这些文件会标有注释,告诉您不要更改它们。
如果实体代码生成设置为类别/扩展,Xcode 会生成 2 个文件。这些文件标有注释,告诉您不要更改它们。这些是...
Entity+CoreDataProperties.h 和 Entity+CoreDataProperties.m
这两个文件期望 Entity.h 文件在项目中,如果不存在,将在 Xcode 中显示错误。这是您第一次能够在 Xcode 中看到这些文件之一的源代码。
这些文件中的内容
+ CoreDataProperties 文件似乎与以前版本的 Xcode 生成文件相同,除了一个附加项。它们包含实体/NSmanagedObject 的所有属性/属性以及处理具有一对多或多对多关系的实体的方法。新添加的方法是 fetchRequest 子类化 NSmanageObject 的新 fetchRequest 方法。
问题
1) 当您没有任何额外的属性/功能要添加到 NSManagedObject 子类时,类定义现在是代码生成的明显和最佳选择,因为它会自动为您更新文件(当您使用 cmd-s 保存项目时) ?
2) 使用 +CoreDataClass 命名文件遵循类上的类别约定,这意味着应该有一个类作为扩展名。
我是否认为 Entity+CoreDateClass .h/m 文件是旧 Entity.h/m 文件的直接替代品?并且它实际上不是一个类别,尽管有文件名?
3) 对于新的 NSManagedObject 子类,我应该导入 Entity+CoreDataClass.h 而不是 Entity.h?
4)如果我想通过删除大部分 NSManagedObject 子类文件来整理我的项目,我是否只需删除 Xcode 中的文件并将实体 codegen 设置为 Class Definition 或...
当您尝试 #import entity.h 或我是否必须遍历并找到对 #import entity.h 的每个引用并将它们更改为 #import entity+CoreDataClass.h 时,引擎盖下是否有寻找 entity+CoreDataClass 的魔法?
5)我是否正确假设如果我想要一个 NSManagedObject 子类,我想在其中添加一个属性和一个方法,我应该将 codegen 设置为 Category/Extension?
6) 如果我选择 Category/Extension 我必须创建我自己的 NSmanagedObject 子类文件,它只是 entity.h 而不是 entity+CoreDataClass.h?
7) 如果 entity+CoreDataClass.h 是 entity.h 文件的新接受的命名格式,为什么生成的 Category/Extension 文件会查找普通的 entity.h 名称文件而不是 entity+CoreDataClass.h 文件?这只是苹果方面的不一致,我应该接受还是我错过了我应该知道的事情?
谢谢你。
最佳答案
好的 - 很多人看了都没有答案,所以我会试着自己回答。
1)是的 - 如果您不需要向 CoreData 实体添加额外的属性/功能,请使用类定义。这将创建 4 个文件:
Entity+CoreDataClass.h 和 Entity+CoreDataClass.m 和 Entity+CoreDataProperties.h 和 Entity+CoreDataProperties.m 但你永远不会看到它们,因为它们隐藏在派生数据文件夹深处的视线之外。如果您需要检查属性名称,您可以在核心数据编辑器中查看,因为您无法访问这些文件。
2) Entity+CoreDateClass .h/m 文件是旧 Entity.h/m 文件的直接替代品。尽管使用类别的文件命名约定,但它们不是类别,不要让 Apple 的命名系统混淆你。查看文件内部,该类被定义为 Entity 而不是 Entity+CoreDataClass。
3) 对于新的 NSManagedObject 子类(使用“类定义”选项自动生成)导入 Entity+CoreDataClass.h 而不是 Entity.h。毕竟'它是您要导入的文件,而不是其中定义的类。使用该类时,它只是 Entity 而不是 Entity+...
4) 如果你决定整理你的项目,删除你的 NSManagedObject 子类文件,然后将实体代码生成切换到“类定义”,你将需要检查项目并更改所有引用它们的导入语句,方法是将 +CoreDataClass 添加到文档名称。幸运的是,这没什么大不了的,因为 Xcode 无论如何都会将它们全部标记为错误,因此很容易找到它们。
5) 是 - 如果您希望向 NSManagedObject 子类添加属性或功能,请使用代码生成“类别/扩展”选项。
6) 如果选择 Category/Extension,则必须创建我自己的 NSmanagedObject 子类文件,将其命名为 Entity.h。不要将其命名为 Entity+CoreDataClass.h,因为自动生成的 Entity+CoreDataProperty.h 正在寻找导入 Entity.h 文件。
7) 是的,这只是 Apple 的命名不一致。不要让它像我一样扔掉你。
最后,别忘了...
如果你沿着使用 codegen ->Category/Extension 的路线走,如果你向实体添加额外的关系,你将需要更新你的 Entity.h 文件。例如,如果您将关系添加到名为 Car 的 NSManagedObject 子类,则需要添加 @Class Car;
到 Entity.h。
关于objective-c - 为 Xcode 8 Core Data NSManagedObject 子类更改更新 Objective C 项目的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41426484/
我有这个 html 代码: HELLO WORLD! X V HELLO WORLD! X V 我想按 X(类关闭)将父 div 的高度更改为 20px 并显示 V(类打开),但在每个 d
在会计应用程序的许多不同实现中,有两种主要的数据库设计方法来保存日志和分类帐数据。 只保留 Journal 信息,然后 Ledger 只是 Journal 的一个 View (因为 journal 总
我想在另一个子里面有一个子, sub a { sub b { } } 我想为每次调用 sub b 创建一个新的 sub a 实例。有没有办法在 Perl 中做到这一点? 当我运行上面的
我有一些代码正在查找重复项并突出显示单元格: Private Sub cmdDups_Click() Dim Rng As Range Dim cel As Range Set Rng = ThisW
可能有一个简单的解决方案,但我很难过。 我有一个包含一个 ID 字段的主表。在两个可能的字段中有一个具有该 ID 的子表。想象一个由选手 A 和选手 B 组成的 double 队。Master 表将有
假设我有一个包含对象的数组: [ { "id": "5a97e047f826a0111b754beb", "name": "Hogwarts", "parentId": "
我正在尝试对 MySQL 数据库表执行一对父/子模型的批量插入,但似乎无法使用标准的 ActiveRecord 功能来完成。所以,我尝试了 activerecord-import gem,但它也不支持
我有一个带有多个子类的父抽象类。最终,我希望通过 GUI 中的进度条显示子类中完成的进度。 我目前所做的,我意识到这是行不通的,是在父类中声明为每个子类将覆盖的虚拟方法的事件方法定义。所以像: pub
是否可以通过键数组在对象中设置变量?例如我有这个对象: var obj = {'outer': {'inner': 'value'} }; 并希望设置由键数组选择的值: var keys = ['ou
我有一个名为 companies 的 MySQL 表,如下所示: +---------+-----------+-----------+ | id_comp | comp_name | id_pare
我正在尝试使用 sublime text 在 sublime text 上的 ionic 上打开我的第一个应用程序。它给了我一个“找不到命令”的错误。如何修复? 我试过这些命令: sudo rm -r
不好意思问,但我正在使用 webapp2,我正在设计一个解决方案,以便更容易定义路由 based on this google webapp2 route function .但这完全取决于能够在子级
我有代表树的数字字符串(我不知道是否有官方名称): 012323301212 上面的例子代表了 2 棵树。根用 0 表示。根的直接子代为“1”,“1”的直接子代为“2”,依此类推。我需要将它们分组到由
是否可以在当前 Activity 之上添加 Activity 。例如,假设我单击一个按钮,然后它将第二个 Activity 添加到当前 Activity 。而第二个 Activity 只覆盖了我当前
我很难思考如何为子资源建模。 以作者的书籍为例。你可以有 N 本书,每本书只有一位作者。 /books GET /books POST /books/id PUT /books/id DELETE 到
有人可以向我解释以下内容(python 2.7) 来自已解析文件的两个字符串数字: '410.9''410.9 '(注意尾随空格) A_LIST = ['410.9 '] '410.9' in '41
背景 在 PowerShell 中构建 hash table 是很常见的通过特定属性快速访问对象,例如以 LastName 为基础建立索引: $List = ConvertFrom-Csv @' I
我真的很难弄清楚如何调用嵌套 Polymer Web 组件的函数。 这是标记: rise-distribution组件有 canPlay我想从 rise-playlist
我写了一个小工具转储(以 dot 格式)一个项目的依赖关系图,其中所有位于同一目录中的文件都聚集在一个集群中。当我尝试生成包含相应图形的 pdf 时,dot开始哭: 命令 dot -Tpdf trim
给定一个 CODE ref,是否可以: 访问该 CODE ref 的解析树 通过指定 CODE ref 的解析树来创建一个新的 CODE ref,该解析树可以包含在 1 中返回的解析树的元素 通常我们
我是一名优秀的程序员,十分优秀!