Some test text!
iOS / Guides
File coordination is a system of ensuring that no two processes (or threads within a single process) can change a commonly accessed file in a way the other does not expect, which could result in unexpected behavior and data loss.
iOS provides the UIDocument
abstract base class which enables a subclass to be notified of any changes to the file or its state, which in turn allows an adopting app the ability to coordinate its actions with others.
Apryse provides PTCoordinatedDocument
, a concrete subclass of UIDocument
, to coordinate reading and writing of PDF files (both locally and cloud stored) with other apps. PTCoordinatedDocument
is compatible with both the DocumentViewer
and TabbedViewer
, and is used by our sample project Complete Reader. It is recommended to use a PTCoordinatedDocument
to open a document whenever the document could be written to by another app.
Below is sample code showing how to open a coordinated document in a new PTDocumentController
.
func presentDocument(at documentURL: URL?) {
// Create a document viewer in which to show a document
let documentViewController = PTDocumentController()
// Ensure a URL is available
guard let anURL = documentURL else { return }
// Create a coordinated document backed by the PDF document at the file URL `documentURL`
let coordinatedDocument = PTCoordinatedDocument(fileURL: anURL)
// Create a weak reference to avoid a reference cycle
weak var weakself = self
// Open the coordinated document in the document viewer
documentViewController.setCoordinatedDocument(coordinatedDocument, completionHandler: { error in
// Create a strong self to ensure access during use
guard let strongSelf = weakself else { return }
// Create an empty navigation controller to host the document viewer
let navigationController = UINavigationController(rootViewController: documentViewController)
// Create a button to close the navigation controller#selector(sayHello(sender:))
let item = UIBarButtonItem(barButtonSystemItem: .done, target: strongSelf, action: #selector(strongSelf.close(_:)))
// Add the close button to the navigation controller
documentViewController.navigationItem.setLeftBarButton(item, animated: false)
strongSelf.view.setNeedsLayout()
// Present the view controller
strongSelf.present(navigationController, animated: true)
})
}
// Method to dismiss the view controller
@objc func close(_ barButtonItem: UIBarButtonItem?) {
self.dismiss(animated: true)
}
Trial setup questions? Ask experts on Discord
Need other help? Contact Support
Pricing or product questions? Contact Sales