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

Swift: Unacceptable type of value for attribute when creating new NSEntity

我设置了一个具有以下属性的核心数据实体:

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 时崩溃并显示错误消息:

Unacceptable type of value for attribute: property = "resellerNo"; desired type = NSNumber; given type = __NSTaggedDate; value = 2001-01-01 00:00:00 +0000.

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

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

有什么想法吗?

好的,最后证明很简单。事实证明我没有向实体添加 class。

如果您遇到这个问题:

  1. 点击 xcdatamodel
  2. 选择实体。
  3. 在实用程序栏中显示数据模型检查器。
  4. 输入定义的 class 名称(在我的例子中是经销商)

我还必须将我的 class 定义更改为:

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

希望这对某人有所帮助。

我在 table 视图绑定中收到了同样的错误消息。单元格(文本字段)默认为字符串的返回值,但核心数据希望它作为 NSNumber,因此看到 unacceptable 类型值错误。

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