小编Bil*_*ing的帖子

iPhone(iOS)应用程序使用本地sqlite并希望在多个设备之间同步

我有一个iPhone(iOS)应用程序,可以将数据保存在每个设备上的本地SQLite数据库中.该应用程序用于管理孩子的虚拟银行帐户,以跟踪他们的津贴,支出,储蓄等(KidsBank和KidsBank Free).我收到了很多父母的请求,要求父母之间甚至他们孩子的iOS设备之间提供同步功能.

我已经考虑了几个选项,但是所有这些选项都很乏味且非常重要,因为这基本上需要数据库复制或新架构.理想情况下,任何设备上的任何事务都应该出现(同步)到系列中的所有设备(尽可能立即).

理想情况下,我希望同步是自动和手动

选项包括(1)使用iCloud(2)使用设备之间的直接网络连接(wifi)(3)使用服务器端数据库和Web服务(JSON/RESTFul)

(1)iCloud PRO:iCloud提供分布式文件同步CON:需要iOS 5,SQLite数据库文件无法通过iCloud同步,经典数据库复制(和非平凡)

使用iCloud是一个很好的考虑因素.设备可以将自定义事务日志写入iCloud文件,其中每个设备都有一个文件,该文件由唯一的设备ID标识.全局唯一ID(GID)和最后更改时间戳将添加到每个表中.所有参与的设备都会将唯一的设备ID写入iCloud中的单独文件.在应用程序启动或更改日志文件时,在特定设备上运行的应用程序将通过iCloud从文件加载所有事务,但不加载在自己设备上生成的事务.加载事务的最后一个参与设备将从文件中删除该事务.如果设备不是最后一个参与设备,它只需在交易上签名并允许文件通过iCloud进行同步.可能有更好的算法,但基本思路是相同的 - 使用iCloud来推动变更日志.

(2)直接wifi连接将允许两个设备手动进行同步.PRO:管理同步过程并不复杂CON:用户必须选择在wifi上连接时从他们的应用程序同步

(3)移动整个数据库或管理服务器上的事务.专业版:不再需要同步CON:网络驱动应用的典型问题.需要重写数据库服务层(目前在​​SQL中)才能使用远程Web服务.运行服务器的成本(我会使用AWS).

任何人都可以提供一些在多个设备之间同步SQLite的经验吗?我倾向于使用iCloud来推动事务日志.我正在努力降低成本和复杂性.

sqlite iphone ios icloud

12
推荐指数
1
解决办法
4286
查看次数

是什么原因导致iOS iCloud错误:错误Domain = BRCloudDocsErrorDomain Code = 12"操作无法完成." 延迟后重试:60

iPhone/iOS应用程序使用CoreData + SQLite(NSSQLiteStoreType)+ iCloud iOS.当应用程序在首次安装时启动时(或通过xcode删除并重新安装后),并且先前安装或同一帐户中的其他设备在iCloud中存在先前的应用程序数据时,会发生以下错误,然后是60秒的重试延迟,然后成功迁移到iCloud.结果是应用程序的用户认为在升级应用程序时他们的数据会丢失.但是,在60秒延迟之后,数据将恢复.错误和一些代码如下.

是什么导致这个错误?在哪里可以了解有关此错误的更多信息?

[4972:2014294] CoreData:iCloud:错误:初始同步通知返回错误(错误域= BRCloudDocsErrorDomain Code = 12"操作无法完成.(BRCloudDocsErrorDomain错误12))"

[4972:2014294] -PFUbiquitySetupAssistant finishSetupWithRetry :: CoreData:Ubiquity ::延迟后重试:60 Error Domain = BRCloudDocsErrorDomain Code = 12"操作无法完成.(BRCloudDocsErrorDomain error 12.)"

这是一个代码片段和更详细的日志,以提供更多上下文.

来自app委托:

        - (void)applicationDidFinishLaunching:(UIApplication *)application { 

            ... standard iCloud and app setup ...

            NSManagedObjectContext *context = [self managedObjectContext];

            ...

            ... query the db ...
        }

        /**
         Returns the managed object context for the application.
         If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. …
Run Code Online (Sandbox Code Playgroud)

iphone core-data objective-c ios icloud

10
推荐指数
1
解决办法
2906
查看次数

标签 统计

icloud ×2

ios ×2

iphone ×2

core-data ×1

objective-c ×1

sqlite ×1