Rem*_*els 63 core-data nsmanagedobject ios10 xcode8
我最近将我的iOS应用程序项目更新到iOS 10.现在我正在尝试更改我的应用程序的核心数据模型,但Xcode生成的新NSManagedObject子类已损坏.我也尝试修复子类手册,但这不起作用.
Core Data Model的最小工具版本设置为Xcode 7.0,代码生成语言设置为Swift.
这是Xcode生成的代码:
import Foundation
import CoreData
import
extension Group {
@nonobjc public class func fetchRequest() -> NSFetchRequest {
return NSFetchRequest(entityName: "Group");
}
@NSManaged public var name: String?
@NSManaged public var platform: NSNumber?
@NSManaged public var profiles: NSOrderedSet?
}
// MARK: Generated accessors for profiles
extension Group {
@objc(insertObject:inProfilesAtIndex:)
@NSManaged public func insertIntoProfiles(_ value: SavedProfile, at idx: Int)
@objc(removeObjectFromProfilesAtIndex:)
@NSManaged public func removeFromProfiles(at idx: Int)
@objc(insertProfiles:atIndexes:)
@NSManaged public func insertIntoProfiles(_ values: [SavedProfile], at indexes: NSIndexSet)
@objc(removeProfilesAtIndexes:)
@NSManaged public func removeFromProfiles(at indexes: NSIndexSet)
@objc(replaceObjectInProfilesAtIndex:withObject:)
@NSManaged public func replaceProfiles(at idx: Int, with value: SavedProfile)
@objc(replaceProfilesAtIndexes:withProfiles:)
@NSManaged public func replaceProfiles(at indexes: NSIndexSet, with values: [SavedProfile])
@objc(addProfilesObject:)
@NSManaged public func addToProfiles(_ value: SavedProfile)
@objc(removeProfilesObject:)
@NSManaged public func removeFromProfiles(_ value: SavedProfile)
@objc(addProfiles:)
@NSManaged public func addToProfiles(_ values: NSOrderedSet)
@objc(removeProfiles:)
@NSManaged public func removeFromProfiles(_ values: NSOrderedSet)
}Run Code Online (Sandbox Code Playgroud)
编辑:这些是Xcode给出的具体错误:
1. Group+CoreDataProperties.swift:13:1: Expected identifier in import declaration (the empty import)
2. Group+CoreDataProperties.swift:13:11: 'Group' is ambiguous for type lookup in this context
3. Group+CoreDataProperties.swift:15:16: Cannot specialize non-generic type 'NSFetchRequest'
4. Group+CoreDataProperties.swift:26:11: 'Group' is ambiguous for type lookup in this context
4. Group+CoreDataProperties.swift:43:82: 'SavedProfile' is ambiguous for type lookup in this context
Run Code Online (Sandbox Code Playgroud)
Lon*_*ang 106
我终于让我上班了.这就是我做的.(航班是我的实体之一)
我按如下方式设置了xcdatamodeld
然后是实体
然后我使用了Editor - > Create NSManagedObject Subclass
这为我的航班实体创建了两个文件
机票+ CoreDataProperties.swift
机票+ CoreDataClass.swift
我将Flights + CoreDataClass.swift重命名为Flights.swift
Flights.swift就是
import Foundation
import CoreData
@objc(Flights)
public class Flights: NSManagedObject {
}
Run Code Online (Sandbox Code Playgroud)
航班+ CoreDataProperties.swift是
import Foundation
import CoreData
extension Flights {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Flights> {
return NSFetchRequest<Flights>(entityName: "Flights");
}
@NSManaged public var ...
}
Run Code Online (Sandbox Code Playgroud)
这似乎对我有用.即使我尝试了许多其他的建议,我也无法让Codegen以任何其他方式工作.
这也让我抓了一会儿,我把它作为助手添加.不要忘记使用新的Generics版本的FetchRequest,你可以做到这一点
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Flights")
Run Code Online (Sandbox Code Playgroud)
Rya*_* H. 42
我相信您在生成NSManagedObject子类文件后遇到这些错误的原因可能与您在更改数据模型时选择的Codegen选项有关.
我不认为这是一个错误.至少在Xcode 8.1(8B62)中没有.
我遇到了类似的问题并通过将Codegen选项更改为"Manual/None"并将Module选项保留为"Global Namespace"来修复它.然后我生成了我的NSManagedObject子类文件.但是,根据您的具体情况,您甚至可能不需要生成NSManagedObject子类.
以下是我对Apple的文档,Apple开发人员论坛和我自己的项目测试的实体Codegen选项的更多详细信息.
选项1:"类定义"
将此视为"即插即用"选项
使用模型编辑器创建希望Core Data管理的实体和关联属性.
不要使用NSMangagedObject子类生成器.Xcode会自动为您生成所需的文件(但它们不会显示在项目导航器中).
如果您确实生成了NSManagedObject文件,Apple会告诉您不应在所述文件的标题注释中编辑这些文件.如果您确实需要编辑这些文件,那么这是您需要使用其他Codegen选项的好兆头.
保留实体的默认类选项(Module = Global Namespace和Codegen = Class Definition)
如果需要覆盖NSManagedObject的方法,可以使用Class选项下的Name创建扩展.
// Optional extension in Entity.swift
extension Entity {
// Override NSManagedObject methods
}
选项2:"手动/无"
与选项1类似,只是您可以查看和编辑NSManagedObject子类文件.
使用模型编辑器创建希望Core Data管理的实体和关联属性.
在使用NSManagedObject子类生成器之前,请将Codgen选项设置为实体的"Manual/None".Module选项应为Global Namespace.
添加/删除/更新属性后,您有两个选择:(1)手动更新为您生成的NSManagedObject文件或(2)再次使用NSManagedObject子类生成器(这将只更新Entity + CoreDataProperties.swift文件).
同样,如果需要覆盖NSManagedObject中的方法和方法,则可以创建扩展.应在Entity + CoreDataClass.swift文件中创建扩展,而不是Entity + CoreDataProperties.swift文件(由于模型编辑器更改,此文件可能会更新).
// Optional extension in Entity+CoreDataClass.swift
extension Entity {
// Override NSManagedObject methods
}
选项3:"类别/扩展"
如果您具有不需要由Core Data管理的自定义属性,请使用此选项.
使用模型编辑器创建希望Core Data管理的实体和关联属性.
确保Module选项设置为Current Product Module,Codegen选项设置为"Category/Extension".
使用您将自行管理的属性创建自己的NSManagedObject子类.
不要使用NSMangagedObject子类生成器.Xcode会自动为您生成所需的文件(但它们不会显示在项目导航器中).
// Subclass NSManagedObject in Entity.swift
class Entity: NSManagedObject {
// Self managed properties
}
// Optional extension in Entity.swift
extension Entity {
// Override NSManagedObject methods
}
小智 10
您可以尝试这些步骤
这有用吗?如果不
确保所有类与实体名称不同.您可以在Build Phases - > Compile Sources中找到这些类.如果类或实体重复,则重命名该类
要么
您可以在项目文件夹中运行此命令以获取更多错误信息
xcodebuild -verbose
当我遇到这个问题时,我收到了这条消息
重复符号_OBJC_CLASS _ $ _ RandomList in:
XXXX/RandomList.o
XXXX/RandomList + CoreDataClass.o
RandomList.h和RandomList + CoreDataClass.h在编译时具有相同的符号
我认为为什么Xcode没有警告你,但编译器会抛出错误
希望对你有帮助
删除第3个import语句,因为它是空的.
注意:我不知道为什么会发生这种情况,但我想这是Xcode 8中的一个错误.只需删除它就能正常工作.
| 归档时间: |
|
| 查看次数: |
40028 次 |
| 最近记录: |