Swift Xcode 中的核心数据使用情况
Swift Core Data Usage in Xcode
我对 Swift 编程比较陌生,最近第一次尝试了 Core Data。但是,我很难理解我遇到的几个(对我来说)奇怪的行为:
- 我已经在“.xcdatamodeld”文件中创建了所有实体及其属性。 Codegen 在“Manual/None”上。一些属性被标记为非可选的。尽管如此,当我生成 NSManagedObject 子类文件时,我仍然认为它们在“...属性”文件中是可选的,即有一个“?”在类型之后。这是为什么?
- 有点 relating/in 与第一个项目符号对比,一些实体的属性没有“?”,尽管它们被标记为可选。当我尝试添加“?”时,出现错误“属性 无法标记为@NSManaged,因为它的类型无法在 Objective-C 中表示”。这是为什么?
- 当我在我的项目中创建 NSManagedObject 子类和 select 一些子文件夹以便在其中创建它们时,它们被放在层次结构树的顶部,无论如何。
- 如果我更改 Core Data 生成的“...Class”/“...Properties”文件中的信息会与“.xcdatamodeld”文件中的内容发生冲突,会发生什么情况。什么优先?它们有什么关系?
总的来说,我发现除了介绍性的东西外,Core Data 上没有太多详细的描述。有人会知道一些好的资源吗?网站? YouTube视频?书?
答案:
创建子classes 手动 不准确地处理可选项。检查任何属性并删除 class 中的问号,如果它在模型中是非可选的。
标量 Swift 可选类型(Int?
、Double?
、Bool?
)无法在 Objective-C 中表示。我建议将它们声明为非可选的。
没关系,它在classes所在的位置没有影响,主要是Project Navigator中的文件名是黑色(有效)并且目标成员是分配正确。
在 Codegen 手册/None 案例中,您负责模型中的类型与 class 中的类型匹配es 否则你可能会得到意想不到的行为。 class 中的任何更改也必须在模型中完成,反之亦然。但是,您可以将 NSSet
或 NSDate
等建议的 ObjC class 替换为原生 Swift 类型 Set<MyClass>
或 Date
,而无需更改模型中的类型.
我对 Swift 编程比较陌生,最近第一次尝试了 Core Data。但是,我很难理解我遇到的几个(对我来说)奇怪的行为:
- 我已经在“.xcdatamodeld”文件中创建了所有实体及其属性。 Codegen 在“Manual/None”上。一些属性被标记为非可选的。尽管如此,当我生成 NSManagedObject 子类文件时,我仍然认为它们在“...属性”文件中是可选的,即有一个“?”在类型之后。这是为什么?
- 有点 relating/in 与第一个项目符号对比,一些实体的属性没有“?”,尽管它们被标记为可选。当我尝试添加“?”时,出现错误“属性 无法标记为@NSManaged,因为它的类型无法在 Objective-C 中表示”。这是为什么?
- 当我在我的项目中创建 NSManagedObject 子类和 select 一些子文件夹以便在其中创建它们时,它们被放在层次结构树的顶部,无论如何。
- 如果我更改 Core Data 生成的“...Class”/“...Properties”文件中的信息会与“.xcdatamodeld”文件中的内容发生冲突,会发生什么情况。什么优先?它们有什么关系?
总的来说,我发现除了介绍性的东西外,Core Data 上没有太多详细的描述。有人会知道一些好的资源吗?网站? YouTube视频?书?
答案:
创建子classes 手动 不准确地处理可选项。检查任何属性并删除 class 中的问号,如果它在模型中是非可选的。
标量 Swift 可选类型(
Int?
、Double?
、Bool?
)无法在 Objective-C 中表示。我建议将它们声明为非可选的。没关系,它在classes所在的位置没有影响,主要是Project Navigator中的文件名是黑色(有效)并且目标成员是分配正确。
在 Codegen 手册/None 案例中,您负责模型中的类型与 class 中的类型匹配es 否则你可能会得到意想不到的行为。 class 中的任何更改也必须在模型中完成,反之亦然。但是,您可以将
NSSet
或NSDate
等建议的 ObjC class 替换为原生 Swift 类型Set<MyClass>
或Date
,而无需更改模型中的类型.