{"id":264,"date":"2017-01-03T00:27:06","date_gmt":"2017-01-03T00:27:05","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/"},"modified":"2017-01-03T00:27:06","modified_gmt":"2017-01-03T00:27:05","slug":"syncing-with-core-data","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/syncing-with-core-data\/","title":{"rendered":"Syncing with Core Data"},"content":{"rendered":"<p>You&#8217;ve been developing your app with a Core Data stack and now you want to add the cloud component. Prompt the user to login and save all its data to the cloud to make it available on all its devices. Or maybe it&#8217;s a content sharing app where you need to distribute data to users of the app.<\/p>\n\n\n\n<p>In any case, writing networking code is time consuming and error prone, so you may turn to\u00a0<strong>CloudKit<\/strong>,\u00a0<strong>Parse<\/strong>\u00a0or\u00a0<strong>Firebase<\/strong>\u00a0to intergrate the cloud component. In the case of\u00a0<strong>CloudKit<\/strong>, you can only support iOS devices and if you go with\u00a0<strong>Parse<\/strong>\u00a0or\u00a0<strong>Firebase<\/strong>\u00a0you&#8217;d have to re-write all the Core Data code.<br>\n\u00a0<br>\nThe Couchbase Mobile team and community have been working really hard on a pluggable component to add sync to your app without re-writing your Core Data models and keeping the cross-platform support. On\u00a0<strong>iOS<\/strong>, the NSIncrementalStore class provides hooks to add pluggable back-ends to your Core Data stack.<\/p>\n\n\n\n<p>It&#8217;s called CBLIncrementalStore and you can find it in the Extra folder of the\u00a0<strong>.zip<\/strong>\u00a0file downloadable\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/nosql-databases\/downloads\/\">here<\/a>.<\/p>\n\n\n\n<p>Make sure to include the CouchbaseLite.framework as well as this class to use it in your project:<\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/Screen20Shot202015-02-2420at2012.21.05.png\" width=\"50%\"><\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">How to use CBLIncrementalSore<\/h1>\n\n\n\n<p>The setup process is very similar to how you would set up a Core Data stack backed by an\u00a0<strong>NSSQLiteStore<\/strong>\u00a0store. So let&#8217;s dive in.<\/p>\n\n\n\n<p>The goal is to have an\u00a0<strong>NSManagedObjectContext<\/strong>\u00a0instance that is associated with a persistent store coordinator loading our managed object model. And finally add a persistent store of type\u00a0<strong>CBLIncrementalStoreType<\/strong>\u00a0to the persistent store coordinator.<\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/slide1.jpg\" alt=\"\"><\/p>\n\n\n\n<p>You could create a new class called\u00a0<strong>CoreDataStack<\/strong>\u00a0to hold the set up logic:<\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<p>Let&#8217;s describe what&#8217;s happening step by step:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Step 1: Load the model that we defined in the\u00a0<strong>.xcdatamodelmodelId<\/strong>\u00a0files.<\/li>\n\n\n<li>Step 2: Call\u00a0<strong>updateManagedObjectModel:<\/strong>\u00a0to insure the Core Data model is mapped to a model Couchbase Lite understands.<\/li>\n\n\n<li>Step 3: Initialize the persistent store coordinator as usual<\/li>\n\n\n<li>Step 4: Set up the managed object context<\/li>\n\n\n<li>Step 5: Check if the corresponding Couchbase Lite database exists. If so, we load the existing\u00a0<strong>CBLDatabase<\/strong>\u00a0as a\u00a0<strong>CBLIncrementalStore<\/strong>\u00a0store type. If not, we perform a migration from the previous SQLite data store to Couchbase Lite.<\/li>\n\n<\/ul>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Adding sync<\/h1>\n\n\n\n<p>The\u00a0<strong>CBLIncrementalStore<\/strong>\u00a0class has a\u00a0<strong>database<\/strong>\u00a0property, you can create replication as usual with Couchbase Lite and Sync Gateway:<\/p>\n\n\n\n<p>You can also add authentication with the\u00a0<strong>CBLAuthenticator<\/strong>\u00a0class. See the\u00a0<a href=\"https:\/\/developer.couchbase.com\/mobile\/develop\/guides\/couchbase-lite\/native-api\/replication\/index.html\">documentation on replications<\/a>\u00a0to see how to do this.<\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Core Data entities in JSON<\/h1>\n\n\n\n<p>Whenever a new entity is saved in Core Data, CBLIncrementalStore adds a CBLIS_type key in the corresponding JSON document stored in Couchbase Lite.<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/CoreData-CBL.png\"><\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<p>From the point of Couchbase Lite and Sync Gateway, it&#8217;s JSON as usual and nothing different there. But having this mapping in mind is useful because you can also use the REST API to add new documents or display them on a web page.<\/p>\n\n\n\n<p><code>curl -X POST -H 'Content-Type: application\/json'  \u00a0 \u00a0 \u00a0 \u00a0-d '{\"CBLIS_type\": \"Person\", \"name\": \"Johnny\"}'  \u00a0 \u00a0 \u00a0 \u00a0 \u00a0https:\/\/localhost:4984\/testdb\/<\/code><\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">For the more curious: subclassing NSIncrementalStore<\/h1>\n\n\n\n<p>To understand how CBLIncrementalStore works, we must follow the api spec: &#8220;NSIncrementalStore subclasses must register<br>\ntheir class with NSPersistentStoreCoordinator, which then constructs persistent store instances as necessary when &#8211;<br>\n<strong>addPersistentStoreWithType:configuration:URL:options:error:<\/strong>\u00a0is called.&#8221; (read more on <a href=\"https:\/\/nshipster.com\/nsincrementalstore\/\">nshipster<\/a>)<\/p>\n\n\n\n<p>Once we register our new store, a couple of method will be called on CBLIncrementalStore, namely:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><u>+type and +initialize<\/u><\/h3>\n\n\n\n<p>The initialize class method is called the first time the class is loaded. That&#8217;s where CBLIncrementalStore registers<br>\nitself with the NSPersistentStoreCoordinator. So when we call\u00a0<strong>addPersistentStoreWithType:configuration:URL:options:error:<\/strong>\u00a0with the CBLIncrementalStore type, it will know about this new store type.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><u>-loadMetada<\/u><\/h3>\n\n\n\n<p>Called automatically by the NSPersistentStoreCoordinator. It will create a Couchbase Lite database, initialize the views to query documents by type and for<br>\nto-many relationships and sets up the metadata for the store. This method also creates a live query for conflicting<br>\ndocuments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><u>-executeRequest:withContext:error:<\/u><\/h3>\n\n\n\n<p>This method is called to do all read\u00a0<em>and<\/em>\u00a0write operations with a persistence<br>\nbackend.\u00a0<\/p>\n\n\n\n<p>If the requestType is\u00a0<strong>NSSaveRequestType<\/strong>, CBLIncrementalStore will map appropriately the Core Data<br>\nNSManagedObject to the Couchbase Lite document if it&#8217;s a new entity created, an update or deletion of objects.\u00a0<\/p>\n\n\n\n<p>If the requestType is\u00a0<strong>NSFetchRequestType<\/strong>, CBLIncrementalStore will query the documents and return an array of<br>\nobjects according to a fetch entity name &amp; predicate.<\/p>\n\n\n\n<p>\nThis conforms to how subclasses of NSIncrementalStore should initialize themselves. You can read more about<br>\n<strong>NSIncrementalStore<\/strong>\u00a0on\u00a0<a href=\"https:\/\/nshipster.com\/nsincrementalstore\/\">nshipster<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>You&#8217;ve been developing your app with a Core Data stack and now you want to add the cloud component. Prompt the user to login and save all its data to the cloud to make it available on all its devices. Or maybe it&#8217;s a content sharing app where you need to distribute data to users [&hellip;]<\/p>\n","protected":false},"author":51,"featured_media":18,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_acf":"","footnotes":""},"categories":[1],"tags":[],"ppma_author":[115],"class_list":["post-264","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Syncing with Core Data - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/syncing-with-core-data\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Syncing with Core Data\" \/>\n<meta property=\"og:description\" content=\"You&#8217;ve been developing your app with a Core Data stack and now you want to add the cloud component. Prompt the user to login and save all its data to the cloud to make it available on all its devices. Or maybe it&#8217;s a content sharing app where you need to distribute data to users [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/syncing-with-core-data\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-03T00:27:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/\"},\"author\":{\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/ec4dfbd349cb4a321fb6a92b71a9a7f6\"},\"headline\":\"Syncing with Core Data\",\"datePublished\":\"2017-01-03T00:27:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/\"},\"wordCount\":728,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/\",\"name\":\"Syncing with Core Data - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-03T00:27:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/syncing-with-core-data\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Syncing with Core Data\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/ec4dfbd349cb4a321fb6a92b71a9a7f6\",\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g09977bdd14473dc23a125f2f74c3e816\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"caption\":\"James Nocentini, Technical Writer, Mobile, Couchbase\"},\"description\":\"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/james-nocentini\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Syncing with Core Data - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/syncing-with-core-data\/","og_locale":"es_MX","og_type":"article","og_title":"Syncing with Core Data","og_description":"You&#8217;ve been developing your app with a Core Data stack and now you want to add the cloud component. Prompt the user to login and save all its data to the cloud to make it available on all its devices. Or maybe it&#8217;s a content sharing app where you need to distribute data to users [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/syncing-with-core-data\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-03T00:27:05+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"James Nocentini, Technical Writer, Mobile, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Nocentini, Technical Writer, Mobile, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/"},"author":{"name":"James Nocentini, Technical Writer, Mobile, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6"},"headline":"Syncing with Core Data","datePublished":"2017-01-03T00:27:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/"},"wordCount":728,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/","url":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/","name":"Syncing with Core Data - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","datePublished":"2017-01-03T00:27:05+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/syncing-with-core-data\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Syncing with Core Data"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6","name":"James Nocentini, Technical Writer, Mobile, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g09977bdd14473dc23a125f2f74c3e816","url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","caption":"James Nocentini, Technical Writer, Mobile, Couchbase"},"description":"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/james-nocentini\/"}]}},"acf":[],"authors":[{"term_id":115,"user_id":51,"is_guest":0,"slug":"james-nocentini","display_name":"James Nocentini, Technical Writer, Mobile, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","author_category":"","first_name":"James","last_name":"Nocentini","user_url":"","job_title":"","description":"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=264"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/264\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/18"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=264"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}