【问题标题】:Core data managed var seems to be initialised instead of nil核心数据托管 var 似乎被初始化而不是 nil
【发布时间】:2016-03-04 14:23:08
【问题描述】:

我有一个带有这个变量的核心数据类:

@NSManaged var tags: NSSet?

问题在于,当从数据存储中获取类时,tags 变量而不是 nil,被初始化为一个空的 NSSet 对象。

这种行为正常吗?

我以为它会是零。

更新和问题: 我检查了核心数据属性的行为,获取后它为 nil。

是否有可能对于Relationships,即NSSet/NSOrderedSet,核心数据不使用nil,而是初始化一个空集?

【问题讨论】:

    标签: core-data null init nsset


    【解决方案1】:

    Core Data 使用故障:

    documentation

    基本上这里发生的是:

    托管对象故障是相应类的实例,但其持久变量尚未初始化。

    关系故障是表示关系的集合类的子类。

    所以你可能有一个集合的实例,但在你访问它之前你不会知道持久值是什么。

    希望对你有帮助

    【讨论】:

    • 谢谢罗恩。因此,在像我这样的情况下,似乎我必须检查集合的长度,而不是 nil。对于托管对象,我必须检查“isFault”。对吗?
    • @Shay 你不应该直接打电话是错误的。一旦您访问托管对象上的关系,故障应该触发并解决它。所以 count 可以知道有多少标签。
    • 如果您只是想在获取标签之前对标签进行计数,您可以使用 countForFetchRequest 或 NSManagedObjectContext developer.apple.com/library/ios/documentation/Cocoa/Reference/…:
    • 那么我应该如何处理托管对象变量而不是集合?我不能对它们使用 count 来知道它们是否真的存在,如果对象不是 nil。在您放置的文档中,它说“如果您仅从持久存储中检索单个 Employee 对象,则其经理、部门和报告关系最初由故障表示。”如果我不能检查 nil 这是一个问题。如果可选的 unbound 为真,就像那个标签一样,这很糟糕。我可以说我做了一个测试,对象的可选不弯曲是错误的,我很高兴看到。但这是正常行为吗?
    • 确保这一点的一件事是设置 relationshipKeypathsForPrefetching。这样你就可以保证一旦你的对象被解析,它的关系也是如此。然后在任何情况下检查 nil 都应该没问题。因为故障已经解决了
    猜你喜欢
    • 2017-08-31
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多