尝试运行我的应用程序时出现以下错误
致命错误:对类'rcresttest.CatalogItem'使用未实现的初始化程序'init(entity:insertIntoManagedObjectContext :)'
我可以通过将数据模型中的Entity类改为其他类来绕过此错误,但是当我尝试向下转换时,我将得到一个swift_dynamicCastClassUnconditional:
这是beta6中的错误还是我做错了什么?
CatalogItem.swift
import CoreData
@objc(CatalogItem)
class CatalogItem : NSManagedObject {
@NSManaged var id : String
@NSManaged var slug : String
@NSManaged var catalogItemId : String
init(entity: NSEntityDescription!, context: NSManagedObjectContext!, catalogResultsDict : NSDictionary) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
id = catalogResultsDict["Id"] as String
slug = catalogResultsDict["Slug"] as String
catalogItemId = catalogResultsDict["CatalogItemId"] as String
}
}
和数据模型
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="6220.8" systemVersion="13E28" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
<entity name="CatalogItem" representedClassName="CatalogItem" syncable="YES">
<attribute name="catalogItemId" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="id" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="slug" optional="YES" attributeType="String" syncable="YES"/>
</entity>
<elements>
<element name="CatalogItem" positionX="-45" positionY="0" width="128" height="90"/>
</elements>
</model>
编辑:
更改datamodel类的名称以获得模块前缀尝试强制转换后出现错误消息。
2014-08-20 10:49:15.335 rcresttest [63516:4194127] CoreData:警告:无法为实体“CatalogItem”加载名为“rcresttest.CatalogItem”的类。找不到类,而是使用默认的NSManagedObject。
答案 0 :(得分:15)
这是指定初始值设定项的问题。只需在convenience
前添加init
,然后在init(entity:insertIntoManagedObjectContext:)
上致电self
,而不是super
。