Swift:创建新NSEntity时属性的值不可接受

时间:2016-04-03 09:11:50

标签: swift exc-bad-access nsentitydescription

我设置了一个Core Data实体,其中包含以下属性:

resellerNo:Int
resellerName:String

我按如下方式设置了NSManagedObject:

class Reseller: NSManagedObject
{
    @NSManaged var resellerNo: Int
    @NSManaged var resellerName: String
}

如果我尝试运行此方法:

func createNewReseller(resellerName: String)
{
    let context = app.managedObjectContext

    let resellerEntity = NSEntityDescription.entityForName("Resellers", inManagedObjectContext: context)
    let newReseller = Reseller(entity: resellerEntity!, insertIntoManagedObjectContext: context)

    newReseller.resellerNo = 12
    newReseller.resellerName = resellerName
    saveDatabase()
    Swift.print ("Reseller \(resellerName) created")
}

然后在尝试使用错误消息分配resellerNo时崩溃:

  

属性的值不可接受的类型:property =“resellerNo”;   所需类型= NSNumber;给定type = __NSTaggedDate;值=   2001-01-01 00:00:00 +0000。

奇怪的是,如果您事先使用控制台打印newReseller.resellerNo,那么它可以正常工作。

以完全相同的方式访问其他实体的其他代码可以正常工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

好吧事实证明最终相当简单。事实证明我没有向实体添加一个类。

如果您遇到此问题:

  1. 点击xcdatamodel
  2. 选择实体。
  3. 在“实用工具”栏中显示“数据模型检查器”。
  4. 输入定义的类名(在我的案例中为经销商)
  5. 我还必须将我的班级定义更改为:

    @objc(Reseller)
    class Reseller: NSManagedObject
    {
        @NSManaged var resellerNo: Int
        @NSManaged var resellerName: String
    }
    

    希望这有助于某人。

答案 1 :(得分:0)

我在表视图绑定中遇到了同样的错误消息。单元格(文本字段)默认为字符串的返回值,但 Core Data 想要它作为 NSNumber,因此看到了不可接受的类型值错误。

通过简单地将数字格式化程序拖到表格单元格视图上,它会强制单元格的解释类型为数字,错误就消失了。