Seam, 无缝CloudKit与CoreData同步

分享于 

7分钟阅读

GitHub

  繁體 雙語
CloudKit spreading awesomeness through CoreData.
  • 源代码名称:Seam
  • 源代码网址:http://www.github.com/nofelmahmood/Seam
  • Seam源代码文档
  • Seam源代码下载
  • Git URL:
    git://www.github.com/nofelmahmood/Seam.git
    Git Clone代码到本地:
    git clone http://www.github.com/nofelmahmood/Seam
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/nofelmahmood/Seam
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    seamlogo

    Pod VersionCarthage CompatiblePlatformLicense

    Seam允许你将CoreData存储与CloudKit同步。

    主题

    特性

    • CoreData模型到 CloudKit private 数据库的自动映射
    • 支持资产
    • 背景同步
    • 冲突解决方案

    要求

    • iOS 8.0 +/Mac OS X 10.10 +
    • Xcode 7.1 +

    通信

    在执行上述任何操作之前,请阅读贡献指南。

    安装

    Cocoapods

    CocoaPods 是 Cocoa 项目的依赖项管理器。 你可以使用以下命令安装它:

    $ gem install cocoapods

    要使用CocoaPods将Seam集成到Xcode项目中,请在你的Podfile 中指定它:

    source 'https://github.com/CocoaPods/Specs.git'platform :ios, '8.0'use_frameworks!
    pod 'Seam', '~> 0.6'

    然后,运行以下命令:

    $ pod install

    Carthage

    Carthage 是一个分散依赖管理器,它构建你的依赖性并为你提供二进制框架。

    你可以使用以下命令使用 Homebrew 安装 Carthage:

    $ brew update
    $ brew install carthage

    要使用Carthage将Seam集成到Xcode项目中,请在你的Cartfile 中指定它:

    
    github"Seam/Seam" ~> 0.6
    
    
    
    

    运行 carthage update 来构建框架,并将构建的Seam.framework 拖到Xcode项目中。

    用法

    SeamStoreType的存储类型添加到CoreData堆栈中的NSPersistentStoreCoordinator中:

    let persistentStoreCoordinator =NSPersistentStoreCoordinator(managedObjectModel: yourModel)let seamStore =try persistentStoreCoordinator.addPersistentStoreWithType(SeamStoreType, 
     configuration: nil, 
     URL: url, options: nil) as? Store

    观察以下两个通知以了解同步操作什么时候开始和完成:

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "didStartSyncing:",
     name: SMStoreDidStartSyncingNotification,
     object: seamStore)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "didFinishSyncing:",
     name: SMStoreDidFinishSyncingNotification,
     object: seamStore) funcdidStartSyncing(notification: NSNotification) {
     // Prepare for new data before syncing completes}funcdidFinishSyncing(notification: NSNotification) {
     // Merge Changes into your context after syncing completes mainContext.mergeChangesFromStoreDidFinishSyncingNotification(notification)
    }
     

    最后,无论什么时候或者任何地点,都可以调用同步:

    seamStore.sync(nil)

    在CloudKit服务器上发生更改时触发同步。 订阅存储以从CloudKit服务器接收推送通知。

    seamStore.subscribeToPushNotifications({ successful inguard successful else { return }
     // Ensured that subscription was created successfully})// In your AppDelegatefuncapplication(application: UIApplication, didReceiveRemoteNotificationuserInfo: [NSObject : AnyObject]) {
     seamStore.sync(nil)
    }

    属性

    除了 CKAssetCLLocation,所有的CloudKit属性都自动映射到你的CoreData属性。

    可以将CKAsset和CLLocation设置为在CoreData模型中设置相应的属性。

    CloudKit CoreData
    NSDateNSDate
    NSDataNSData
    NSStringNSString
    NSNumberNSNumber
    CKReferenceNSManagedObject
    CKAsset可以转换
    CLLocation可以转换

    可以转换属性

    CKAsset和CLLocation可以作为可以转换属性在CoreData模型中使用。

    • 使用英镑 CKAsset set可以转换的as为 AttributeType,以英镑CKAssetTransformer作为属性的值转换器名。

    • 使用英镑 CLLocation set可以转换的as为 AttributeType,以英镑CLLocationTransformer作为属性的值转换器名。

    关系

    CloudKit中的CoreData关系转换
    到- 一个在CloudKit服务器上,一个关系被转换为 CKReferences。
    到- 许多对许多关系没有显式创建。 Seam只在CloudKit服务器上创建和管理一个关系。
    如果雇员与部门和部门之间有一对一关系,那么的例子与员工之间的关系将只在CloudKit服务器上创建前者。 它将使用一个关系 fullfil。 如果部门的所有员工都可以通过获取属于该部门的所有员工来完成。

    注意:你必须在应用程序模型或者Seam中创建反向关系,否则你将无法将CoreData模型转换成CloudKit记录。 可能发生意外错误和数据的currOption。

    正在启动

    下载演示项目,运行它,并看到它发生的神奇。

    常见问题解答

    tvOS支持?

    tvOS不提供持久的本地存储。 Seam使用SQLite文件保存你的数据库的本地副本,这在tvOS中是不可能的。

    应用

    应用程序的列表,使用的是英镑的Seam。

    作者

    Seam由 Nofel Mahmood 拥有和维护。

    你可以在 Twitter中跟踪他。

    许可证

    Seam在MIT许可下可用。 查看许可证文件了解更多信息。


    syn  CORE    SEAM  Cloudkit  
    相关文章