Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Simperium-文件上载但不在设备之间同步_Objective C_Ios_Core Data_Simperium - Fatal编程技术网

Objective c Simperium-文件上载但不在设备之间同步

Objective c Simperium-文件上载但不在设备之间同步,objective-c,ios,core-data,simperium,Objective C,Ios,Core Data,Simperium,我今天在寻找iCloud同步核心数据数据库的替代方案时偶然发现了Simperium 它通过数据浏览器传输数据的速度和可视性给我留下了深刻的印象,据我所知,iCloud并不容易提供这一点。我遵循simpleToDo示例应用程序,并设法使其正常工作(该应用程序的ipad版本有一些错误,需要修复) 在对它的工作方式感到满意之后,我决定按照与示例中相同的步骤在我的应用程序中实现它。我删除了所有与icloud相关的代码,并通过虚拟镜像示例中提供的代码重新实现了app delegate核心数据代码(仅对我的

我今天在寻找iCloud同步核心数据数据库的替代方案时偶然发现了Simperium

它通过数据浏览器传输数据的速度和可视性给我留下了深刻的印象,据我所知,iCloud并不容易提供这一点。我遵循simpleToDo示例应用程序,并设法使其正常工作(该应用程序的ipad版本有一些错误,需要修复)

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

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

我的问题

我已经验证了数据正在从两个设备发送到服务器,但是,这两个更改都没有显示在另一个设备上

我错过了什么?我在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
,它是一个本机类,在核心数据中添加、删除和更改项时自动更新
UITableView
。如果以这种方式构建应用程序,则无需执行任何其他操作来更新表视图

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

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

self
实例现在将在Todo实体的任何对象更改时调用类似于
bucket:didChangeObjectForKey:forChangeType:
的方法。您可以在
SPBucket.h

中看到这些委托方法的完整列表谢谢您的回复,我已经启用了详细日志记录,现在可以看到问题的原因了。我确实使用了NSFetchedResultsController,但是,日志会反复返回以下错误:“Simperium超时,服务器没有响应获取代码504(客户端),5秒钟后重试…”。知道这是什么原因吗?504是一个预期的日志语句…大约每60秒发生一次超时,它正在重新连接。因此,问题将出现在其他地方。日志里还有其他线索吗?