小编rya*_*ete的帖子

NSMergePolicyType 的文档是错误的,还是我误解了描述?

具体来说,我想知道.mergeByPropertyObjectTrumpMergePolicyType和的定义是否.mergeByPropertyStoreTrumpMergePolicyType交换。

来自Apple(强调我的):

mergeByPropertyObjectTrumpMergePolicyType:合并冲突的策略...通过单个属性,外部更改胜过内存更改

我的实验:

在一个新的 iOS 项目中:

  1. 我创建了两个共享持久存储协调器的上下文 -mainbackground. 每个上下文的合并策略设置为.mergeByPropertyObjectTrumpMergePolicyType(与上面的描述相同)。
  2. 在该模型中,我定义一个Document实体W / Aname型的属性String/ NSString
  3. 我创建并保存一个实例,documentADocument
  4. main上下文中,我获取documentA并将其设置name为“main_document”。我不保存。
  5. background上下文中,我获取documentA并将其设置name为“background_document”。
  6. 我保存background上下文。
  7. documentA.name正如预期的那样,数据库的版本(使用外部 sqlite 客户端获取)现在是“background_document”。
  8. 我保存main上下文。

这是我遇到意外行为的地方,至少根据我对文档的阅读 - 数据库的版本documentA.name现在是“main_document”。

如果外部更改应该胜过内存更改,那么数据库的值不应该仍然设置为“background_document”吗?

编辑:如果我将每个上下文的合并策略切换到.mergeByPropertyStoreTrumpMergePolicyType,我会从.mergeByPropertyObjectTrumpMergePolicyType的描述中得到我期望的行为- 保存main上下文会丢弃 …

core-data ios swift

7
推荐指数
1
解决办法
313
查看次数

可能通过枚举案但仍然使用其相关值?

我有一个Result带有相关值的枚举:

enum Result {
    case success(object: AnyObject)
    case failure(errorMessage: String)
    case reauthenticate(errorMessage: String)
}
Run Code Online (Sandbox Code Playgroud)

我想以相同的方式处理failurereauthenticate案例,但也需要访问相关的值.Swift中是否有语言功能让我在failure不丢失errorMessage 的情况下完成这个案例?就像是:

switch result {
    case .success(_):
        // ...
    case .failure(let errorMessage): fallthrough
    case .reauthenticate(let errorMessage:
        print(errorMessage)
}
Run Code Online (Sandbox Code Playgroud)

我知道还有其他方法可以解决这个问题.例如,我可以添加一个计算errorMessagevar Result.我的问题是它是否可以在switch语句中完成(使用fallthrough或其他方法).

enums swift

1
推荐指数
1
解决办法
690
查看次数

标签 统计

swift ×2

core-data ×1

enums ×1

ios ×1