今天,我偶然发现了Simperium,同时寻找一种替代iCloud同步核心数据数据库的方法。

它对通过数据浏览器进行数据传输的速度和可见性给我留下了深刻的印象,据我所知,iCloud无法轻松提供这些功能。我遵循了simpleToDo示例应用程序并设法使其正常工作(该应用程序的ipad版本存在一些错误,需要修复)。

在对它的工作方式感到满意之后,我决定按照与示例相同的步骤在我的应用程序中实现它。我删除了所有与icloud相关的代码,并通过虚拟地镜像了示例中提供的代码来重新实现了应用程序委托核心数据代码(仅对我的受管对象模型进行了少许改动)。

就在我的应用程序中创建记录而言,一切似乎进展顺利,我可以看到所做的更改已通过网站的仪表板数据浏览器工具上传。

我的问题

我已经验证了数据已从两个设备发送到服务器,但是,这些更改均未显示在另一设备上。

我想念什么?我在simpleToDo示例的代码中找不到任何东西,这似乎表明可以在收到某种通知后调用该方法来执行表视图的更新或刷新。

此外,我看不到任何日志显示任何新记录已被检测到/已添加到队列或已下载。

我与Simperium相关的最新日志是:

2012-12-30 21:00:46:772 myClients[745:907] Simperium authentication success!
2012-12-30 21:00:46.781 myClients[745:907] Reachability Flag Status: -R ------- networkStatusForFlags
2012-12-30 21:00:46:782 myClients[745:907] Simperium starting network managers...
2012-12-30 21:00:49:514 myClients[745:907] Simperium finished processing index for Client


任何帮助将不胜感激,我真的很期待看到这个对我有用,因为我相信它将是一个很好的选择。

最佳答案

您可以在Simperium实例上启用更多详细的日志记录:

simperium.verboseLoggingEnabled = YES;


这将帮助您确认每个设备上都在接收数据。您已经发现,应用程序的基于Web的数据浏览器可以帮助您确认是否正在发送数据。

除此之外,您提到的示例使用NSFetchedResultsController这是一个本机类,当在Core Data中添加,删除和更改项时,该类会自动更新UITableView。如果您以这种方式构建应用程序,则无需执行其他任何操作即可更新表视图。

如果需要更完全的控制,或者您有要手动更新的UI元素,则可以使用SPBucketDelegate在数据更改时得到通知。每个实体都有一个存储桶,您可以从Simperium实例中检索该存储桶。然后,您可以在该存储桶上设置SPBucketDelegate

SPBucket *bucket = [simperium bucketForName:@"Todo"];
bucket.delegate = self;


现在,当属于Todo实体的任何对象发生更改时,self实例将具有类似bucket:didChangeObjectForKey:forChangeType:的方法。您可以在SPBucket.h中看到这些委托方法的完整列表。

关于objective-c - Simperium-文件上传但设备之间不同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14090002/

10-10 20:49