我今天偶然发现了Simperium,同时寻找iCloud同步核心数据库的替代方案。
我对它通过数据浏览器传输数据的速度和可见性印象深刻,这是iCloud从我的知识中无法轻易提供的。我已经关注了simpleToDo示例应用程序并设法使其正常工作(应用程序的ipad版本有一些需要修复的错误)。
在对它看起来如何工作感到满意后,我决定按照与样本相同的步骤在我的应用程序中实现它。我删除了所有与icloud相关的代码,并通过虚拟镜像示例中提供的代码重新实现了app委托核心数据代码(仅对我的托管对象模型稍作修改)。
在我的应用程序中创建记录方面似乎都很顺利,我可以看到更改已通过网站的仪表板数据浏览器工具上传。
我的问题
我已经验证了数据是从两台设备发送到服务器的,但是,这些更改都没有显示在另一台设备上。
我错过了什么?我在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
任何帮助都将不胜感激,我真的很期待看到这对我有用,因为我相信这将是一个很好的选择。
答案 0 :(得分:2)
您可以在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
中看到这些委托方法的完整列表。