我从服务器导入唯一对象,同时创建离线本地对象,iOSLocalId
它是我的离线本地 ID。
我将此函数用于唯一导入:
public class func uniqueID(from source: ImportSource, in transaction: BaseDataTransaction) throws -> UniqueIDType? {
return source["id"] as? UniqueIDType
}
我的问题是我可以指定几个唯一ID,例如
public class func uniqueID(from source: ImportSource, in transaction: BaseDataTransaction) throws -> UniqueIDType? {
return source["iOSLocalId"] as? UniqueIDType
}
我需要这个来绑定两个对象。本地(离线创建)和从服务器接收到的相同。
所以接下来的工作流程是:
- 例如,当我们离线工作时, Cerate 本地对象仅包含
iOSLocalId
但不包含服务器 ID - 当连接显示为在线时,将本地对象推送到服务器。
- 当 API 返回服务器上创建的对象时,同步本地和服务器对象。
在这种情况下,我需要以某种方式告诉 CoreStore 我有两个唯一 ID,一个是本地的,该服务器也传回给我,一个是同一对象的服务器 ID。
但也许还有另一种方法。
当然,我可以编写自己的服务来搜索已经存在的本地对象并更新它们。
也许我可以使用一些这样的功能:
public static func shouldInsert(from source: ImportSource, in transaction: BaseDataTransaction) -> Bool {
return shouldUpdate(from: source, in: transaction)
}
public static func shouldUpdate(from source: ImportSource, in transaction: BaseDataTransaction) -> Bool {
return true
}
但是正如我所说的我每次找到服务器ID都需要更新,但是在离线同步的情况下,我也有本地ID,然后存在确定唯一ID的问题。