我的磁盘空间不足并通过第三方实用程序检查,其中〜/ Library/Developer/Xcode/DerivedData目录占用了大约22GB的磁盘空间.
我搜索了stackoverflow并找到了这篇文章
如何在〜/ Library/Developer/Xcode/DerivedData目录中安全删除?
这个问题的接受答案表明我不应该触摸/删除此目录中的文件夹.所以我做的是
除非我错过了帖子中的答案,否则我想通过询问有经验的开发人员来确保如果我从DerivedData中删除所有文件夹,那么在构建,测试和编译这些项目时不会对我造成伤害.
我有一个Objective-C模型类MyType.这个类用在Swift代码中:
NSEntityDescription.insertNewObjectForEntityForName("MyType", inManagedObjectContext: context) as! MyType
Run Code Online (Sandbox Code Playgroud)
该as!投导致错误信息
Core Data: Could not cast value of type 'MyType_MyType_2' (0x7be99a30) to MyType (0xf33db74).
Run Code Online (Sandbox Code Playgroud)
如果我按照NSManagedObject它的方式投射它.当我打印结果时,我仍然可以看到,它是MyType的实际实例:
<MyType: 0x7ae06d50> (entity: MyType; id: 0x7aeba6d0 <x-coredata:///MyType/t957F2860-85F8-46E0-B6D6-4D1DF6C4EC613> ; data: {
...the fields...
})
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?这个名字MyType_MyType_2来自哪里?
我将coreData swift类定义为
import Foundation
import CoreData
@objc(Users)
public class Users: NSManagedObject {
}
Run Code Online (Sandbox Code Playgroud)
文件名是
Users+CoreDataClass.swift
Run Code Online (Sandbox Code Playgroud)
我需要称之为
NSFetchRequest* request = [Users fetchRequest];
Run Code Online (Sandbox Code Playgroud)
我尝试导入"Users+CoreDataClass-Swift.h"但是它没有识别任何具有用户名的类.
我错过了什么.
我收到此错误似乎警告我重复文件.我错过了什么或Xcode现在不需要创建nsmanaged子类来操作核心数据.我尝试创建一个空白项目,同样的事情发生了.这是错误数据
<unknown>:0: error: filename "Card+CoreDataClass.swift" used twice: '/Users/user/Documents/Developer/coredata/Card+CoreDataClass.swift' and '/Users/user/Library/Developer/Xcode/DerivedData/coredata-gicbdltjgiidbcfxaqqaxvkqwnnk/Build/Intermediates/coredata.build/Debug-iphonesimulator/coredata.build/DerivedSources/CoreDataGenerated/coredata/Card+CoreDataClass.swift'
<unknown>:0: note: filenames are used to distinguish private declarations with the same name
<unknown>:0: error: filename "Card+CoreDataProperties.swift" used twice: '/Users/user/Documents/Developer/coredata/Card+CoreDataProperties.swift' and '/Users/user/Library/Developer/Xcode/DerivedData/coredata-gicbdltjgiidbcfxaqqaxvkqwnnk/Build/Intermediates/coredata.build/Debug-iphonesimulator/coredata.build/DerivedSources/CoreDataGenerated/coredata/Card+CoreDataProperties.swift'
<unknown>:0: note: filenames are used to distinguish private declarations with the same name
Command /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
这意味着我已经自动创建了文件.我甚至可以制作一个Card对象,而无需手动创建子类.谢谢.
我只是简单地用Core Data创建了一个演示项目.
我Userinfo在我的数据模型中创建了一个实体.现在我创建了NSManagedObject这个实体的子类.
Xcode自动生成了这4个类.
现在,当我构建项目时,它会抛出此错误:
我已经做了我所知道的一切,以消除重复的错误,但没有任何帮助.
我认为这是一个Xcode错误.请帮忙.
我从编码中休息了几个月然后回来发现CoreData与Xcode8/iOS10/macOS Sierra的变化.
我一直试图在Objective C中围绕新的NSManagedObject子类生成,但网上的内容很少.在我开始屠宰我的项目并完全搞砸了之前,我需要澄清一些事情,但首先,我发现的一些事情可能对其他人有用...
事情在哪里
自动生成的文件深埋在DerivedData文件夹中.查看USER-> Library-> Developer-> Xcode-> DerivedData-> ProjectName-lotsOfRandomLetters-> Build然后继续打开文件夹,直到找到DerivedSources-> CoreDataGenerated.
自动生成的文件不会出现在项目文件夹或导航器中,但如果一个Xcode中存在错误,则会显示源代码.
Xcode生成的东西
有三种codegen设置 - 手动/无,类定义和类别/扩展.
当实体codegen设置为manual/none(这是旧行为)时使用Editor-> Create创建NSmanagedObject子类NSManagedObject Subclass在项目中生成4个文件...
实体+ CoreDataClass.h和实体+ CoreDataClass.m和实体+ CoreDataProperties.h和实体+ CoreDataProperties.m
(以前的版本Xcode 7生成了Entity.h,Entity.m,Entity + CoreDataProperties.h和Entity + CoreDataProperties.m文件)
如果实体的codegen设置为Class Definition,Xcode会在派生数据文件夹中自动生成这4个相同的文件 - 而不是项目.然后这些文件会标记一条注释,告诉您不要更改它们.
如果实体codegen设置为Category/Extension,Xcode将生成2个文件.这些文件标有注释,告诉您不要更改它们.这些是...
Entity + CoreDataProperties.h和Entity + CoreDataProperties.m
这两个文件期望Entity.h文件在项目中,如果不存在则会在Xcode中显示错误.这是您有一次能够在Xcode中查看其中一个文件的来源.
什么是这些文件
+ CoreDataProperties文件看起来与生成以前版本的Xcode生成文件的文件相同,只有一个添加.它们包含实体/ NSmanagedObject的所有属性/属性以及处理具有一对多或多对多关系的实体的方法.新增加的是fetchRequest子类化NSmanageObject的新fetchRequest方法的方法.
问题
1)当您没有任何额外的属性/功能添加到NSManagedObject子类时,类定义现在是codegen的明显和最佳选择,因为它会自动为您更新文件(当您使用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时,是否存在寻找实体+ CoreDataClass的魔法? ?
5)我是否正确地假设如果我想要一个NSManagedObject子类我要添加一个属性和一个方法,我应该将codegen设置为Category/Extension?
6)如果我选择Category/Extension我必须创建自己的NSmanagedObject子类文件,它只是entity.h而不是entity + CoreDataClass.h?
7)如果entity + …