通过生成已知的过期 CKServerChangeToken 来测试 CKErrorChangeTokenExpired 处理

mal*_*hal 5 objective-c ios cloudkit

标题评论指出CKFetchDatabaseChangesOperation fetchDatabaseChangesCompletionBlock

“如果服务器返回CKErrorChangeTokenExpired错误,则该previousServerChangeToken值太旧,客户端应该丢弃其本地缓存并重新获取此记录区域中以 nil 开头的更改previousServerChangeToken。”

我想测试这个场景,因此我想生成一个过期的,CKServerChangeToken这样我就可以将其设置previousServerChangeTokenCKFetchDatabaseChangesOperation.

我从私有标头添加了一个 init 方法:

@interface CKServerChangeToken (Private)
    - (id)initWithData:(NSData *)data;
@end
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用它:

CKServerChangeToken knownExpiredToken = [[CKServerChangeToken alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:@"AQAAAVl57tUGHv6sgNT9EeaTcQCM+sDHHA==" options:0]];
Run Code Online (Sandbox Code Playgroud)

该字符串是从请求返回的有效更改令牌,我尝试修改它但未成功,例如将我看到的递增数字减少到较低的数字。然而,我设法得到了另一个奇怪的无效参数错误,例如缺少连续标记。如果CloudKit工程师有任何建议,我将不胜感激,谢谢。

Jor*_*ith 0

如果苹果提供一种方法来做到这一点,那就太好了,因为这是一个绝对需要测试的关键情况。

我找不到任何推荐的方法来执行此操作,因此我使用了为其他区域生成的令牌。如果您像我一样拥有多个区域,则可以有效地跨线令牌检索。这不是一个优雅的解决方案,但它确实有效......:)