Skip To Content

Sync offline edits

In this topic

Your users can edit offline in a services pattern and later sync their edits back to a feature service when connected. Syncing offline edits requires that you've created a geodatabase using a sync-enabled feature service from ArcGIS for Server, ArcGIS Online, or Portal for ArcGIS, as described in Create an offline map. After users have made edits and are ready to sync their local copy of the data with the service, use AGSGDBSyncTask to sync with the feature service. Syncing can be performed even if no edits have been made locally, to pull changes from the feature service into the local copy of the data.

To synchronize edits, do the following:

  • Set up a callback to report on the progress while the synchronization happens.
  • Set up a callback to report when the process finishes or fails.
  • Create or obtain sync parameters for the synchronization task.
  • Create an AGSGDBSyncTask instance.
  • Call the syncGeodatabase method on the AGSGDBSyncTask.
Note:
In a sync operation, edits most recently synced to the service will overwrite previously synced edits, regardless of time of edits.

For descriptions of errors that can arise when syncing offline edits, see Error handling with sync.

Register a geodatabase in a pre-planned workflow

In a services pattern workflow known as a pre-planned workflow, you generate the geodatabase once and load copies of it onto each user's device. If you've generated the geodatabase on the user's device with AGSGDBSyncTask, you don't need to register a geodatabase.

In the pre-planned workflow, you use the registerSyncEnabledGeodatabase method to register each geodatabase copy (on each device) with the feature service you used to generate the original geodatabase. Registering in this way ensures each device receives the correct updates during sync operations.

Caution:

  • Once you call unregister on a geodatabase, you cannot re-register the same geodatabase.
  • If the original geodatabase is ever unregistered, no additional clients can use that copy to register.

For a list of benefits of this workflow, see Register a geodatabase in a pre-planned workflow in "Create an offline map."

Code sample

The following sample shows how to sync your offline edits back to a feature service.

//Create the synchronization parameters
AGSGDBSyncParameters *syncParams = [[AGSGDBSyncParameters alloc] initWithGeodatabase:self.geodatabase];

//Override any parameters here, for instance if you want to 
//change the sync direction (upload, download, bidirectional)
//or if you want to sync only a subset of layers.


//Synchronize the geodatabase (with parameters)
[self.geodatabaseTask syncGeodatabase:self.geodatabase params:syncParams
  
  //Status block - provides feedback from this asynchronous job
  status:^(AGSResumableTaskJobStatus status, NSDictionary *userInfo){
   NSLog(@"Status: %@", status);
  }

  //Completion block - executes when the job has completed
  completion:^(AGSGDBEditErrors *editErrors, NSError *error){
   if (error) {
    NSLog(@"Error synchronizing geodatabase:%@",error);
   }
   else{
    NSLog(@"Synchronization complete");
   }
  }
];

Related topics