【问题标题】:How NSNumber? == nil is submitted in Objective-C during runtime?NSNumber如何? == nil 在运行时在 Objective-C 中提交?
【发布时间】:2017-12-18 16:21:59
【问题描述】:

今天我开始创建简单的 xcdatamodel,其中只有 1 个实体和几个属性。所以当我在 nsmanagedobject 的类定义中创建整数 16 类型的数字属性时,它的类型表示为 NSNumber?

class JournalEntry : NSManagedObject {

    @NSManaged var date: Date?
    @NSManaged var height: String?
    @NSManaged var period: String?
    @NSManaged var wind: String?
    @NSManaged var location: String?
    @NSManaged var rating: NSNumber?
}

为什么不在 int16 中? (我读过 objc 没有 int? 类型) (因为在模型中我允许属性是可选的)所以如果我不给 NSNumber 赋值?属性在运行时如何在 objc 中表示? (它会为零?p.s.我将初始值删除为零,所以没有初始值)

【问题讨论】:

  • Objective-C int(C int,因为它们是从 C 导入的)没有 nil 值,因为它们不是对象。通常使用一个特殊的值来表示int0 在这种情况下是个坏主意。这称为“零为空”反模式。
  • JournalEntry 的定义从何而来? Xcode 生成了吗?您是否使用其他工具生成它?你是手写的吗?我试图在 Xcode 10.1 中重现您的问题,但我找不到将属性放入 class 的方法。我只能让它把属性放在extension中。

标签: objective-c swift core-data nsmanagedobject


【解决方案1】:

由于您的评分是可选的 NSNumber,因此初始值为 nil(您可以将其理解为“无值”)或您在 CoreData 模型编辑器中提供的默认值。 同样在 swift 中,您应该能够使用 Int64 而不是 NSNumber

【讨论】:

  • 谢谢,请问您知道 swift nil 对象在 objc 运行时中如何表示吗?我的意思是如果int?是 nil,所以在 objc 运行时它将是什么,它将被转换为什么内容
  • Swift nil ~= Objective-C nil。至于INT?在 Obj-C 中,查看:stackoverflow.com/questions/24221407/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多