You can just use NSFileCoordinator and NSFileManager methods to move the files in and out. I don't know if it is safer, but it should give you more control over error conditions and what should happen when something goes wrong.
For an example, take a look at the iCloud backend of the Ensembles framework here (Disclosure: it is my project). Search for uploadLocalFile:...
and downloadFromPath:...
. They are particularly advanced methods, with timeouts, but the idea is the same.
First, create a file coordinator.
NSFileCoordinator *coordinator =
[[NSFileCoordinator alloc] initWithFilePresenter:nil];
Then copy or move the file.
[coordinator coordinateReadingItemAtURL:fromURL options:0
writingItemAtURL:toURL
options:NSFileCoordinatorWritingForReplacing
error:&fileCoordinatorError
byAccessor:^(NSURL *newReadingURL, NSURL *newWritingURL) {
[fileManager removeItemAtPath:newWritingURL.path error:NULL];
[fileManager copyItemAtPath:newReadingURL.path
toPath:newWritingURL.path error:&fileManagerError];
}];
If you don't want to program this all yourself, I split off a class that may help (iCloudAccess).