Xcode13编译CoreData分类时提示Property has a previous declaration如何解决
问题原因
Xcode 13调整了CoreData实体代码生成的默认触发逻辑,当你手动创建了MyClass+CoreDataProperties分类的同时,CoreData实体的Codegen配置没有关闭自动生成,Xcode就会在构建时自动生成一份完全相同的分类文件,导致重复声明冲突。你另一个同结构项目正常运行,是因为对应实体的Codegen配置已经设置为不自动生成代码。
解决方案
方案一:保留手动创建的分类文件(推荐,适合需要自定义分类逻辑的场景)
- 打开项目中的
.xcdatamodeld数据模型文件,选中MyClass对应的实体 - 打开右侧工具栏的数据模型检查器(第三个标签,图标为标尺样式)
- 找到
Codegen下拉选项,将默认的Class Definition/Category/Extension修改为Manual/None - 按下
Command+Shift+K清理项目缓存,重新构建即可解决报错
方案二:使用Xcode自动生成的分类文件
如果不需要对MyClass+CoreDataProperties分类做自定义修改,可以直接删除你手动创建的MyClass+CoreDataProperties.h和对应的.m文件,Xcode自动生成的分类会默认集成到项目中,不需要额外导入头文件即可正常使用实体属性。
异常排查
如果修改配置后依然报错,可尝试以下操作:
- 检查项目中是否存在多个重名的
MyClass实体,避免跨数据模型重复生成代码 - 进入
Xcode偏好设置 -> Locations -> Derived Data,删除当前项目对应的派生数据文件夹后重新构建 - 确认
MyClass+CoreDataProperties.h没有被重复引入到多个预编译头文件中
你提供的分类文件语法本身没有问题:
#import "MyClass.h" NS_ASSUME_NONNULL_BEGIN @interface MyClass (CoreDataProperties) + (NSFetchRequest<MyClass *> *)fetchRequest NS_SWIFT_NAME(fetchRequest()); @property (nullable, nonatomic, copy) NSNumber *choice; @property (nullable, nonatomic, copy) NSString *content; @property (nullable, nonatomic, copy) NSString *correctAnswer; @property (nullable, nonatomic, retain) NSObject *extraData; @property (nonatomic) BOOL isCorrect; @property (nullable, nonatomic, copy) NSDate *timeAnswered; @property (nullable, nonatomic, copy) NSDate *timeAsked; @end NS_ASSUME_NONNULL_END
内容的提问来源于stack exchange,提问作者Andrew f0s3 Kosenko
相关产品推荐
相关产品推荐

