CloudKit 记录保存进度

Posted

技术标签:

【中文标题】CloudKit 记录保存进度【英文标题】:CloudKit records saving progress 【发布时间】:2014-12-03 08:09:48 【问题描述】:

我想保存事件和图像(用于事件)记录。我想在 UI 中显示上传进度。 事件是带有文本和位置的小对象。 图片是大对象,图片为 UIImage。

图像记录是数组中的第一项,事件是第二项。

我创建CKModifyRecordsOperation 并将两个CKRecord 对象设置为recordsToSave

比我设置的perRecordProgressBlock:

[operation setPerRecordProgressBlock:^(CKRecord *record, double progress) 
    NSLog(@"#record: %@ progress: %f", record.recordType, progress);
];

还有perRecordCompletionBlock:

[operation setPerRecordCompletionBlock:^(CKRecord *record, NSError *error) 
    NSLog(@"#recordSaved: %@ e: %@", record.recordType, error);
];

我希望看到很多行有两条记录,例如:

#record: ImageRecord progress: 0.050000
#record: ImageRecord progress: 0.100000
#record: ImageRecord progress: 0.150000
             ...
#record: ImageRecord progress: 1.000000
#recordSaved: ImageRecord e: (null)
#record: EventRecord progress: 0.050000
             ...
#record: EventRecord progress: 1.000000
#recordSaved: EventRecord e: (null)

但实际上在控制台输出中我看到了:

#record: ImageRecord progress: 0.000000
#record: ImageRecord progress: 0.447357
#record: ImageRecord progress: 1.000000
#record: ImageRecord progress: 1.000000
#recordSaved: Event e: (null)
#recordSaved: ImageRecord e: (null)

我该怎么办?

【问题讨论】:

嘿AlKozin!您是否设法找到使用 CloudKit 顺利(更好)进展的解决方案? @drdrdrdr 不幸的是,没有。我的解决方案是根据操作的值大致显示进度,但不将进度更改为操作的确切值。 【参考方案1】:

CKModifyRecordOperation 的文档指出: 操作对象为 recordsToSave 属性中的每条记录执行此块零次或多次。

因此,如果对象的保存操作花费的时间很短,那么您可能不会收到进度回调。据我所知,没有办法影响进度通知的频率。

【讨论】:

好的,这在wifi上没问题。边缘节省需要很多时间,但无论如何我只看到三个进度回调:慢速连接和快速连接。 也许这是一个错误?我在操作开始、中间和结束时收到回调这一事实没有任何好处。

以上是关于CloudKit 记录保存进度的主要内容,如果未能解决你的问题,请参考以下文章

记录未保存 Cloudkit

保存后读取 CloudKit 记录

SWIFT/CloudKit - 更新记录并将其保存回容器

CloudKit:使用 CKModifyRecordsOperation 保存记录时出错

将记录保存到 CloudKit 时应用程序崩溃

尝试将对象保存到 CloudKit 记录时得到 nil