I built my application based on NSDocument - well, actually NSPersistentDocument , as it provides access to Core Data services to store my object graph. It worked great for me, and I did not find any flaws.
When you plan to work with an NS(Persistent)Document , you will have to come up with some kind of mechanism to pass an instance of your document to the various controllers that you will create to control the views / windows and their associated data. I implemented this by creating a generic View controller class that can hold a reference to my instance of NSPersistentDocument . All of my view controllers are subclasses of this universal controller, and thus can easily access Core Data services.
My application manages 15 master data objects with volumes varying from hundreds to hundreds of thousands of instances for each object. Not part of your original question, but you might want to use Core Data to save objects. I found this to be a real-time splash screen when creating my application (previously worked with PHP, Java and various DB layers, which usually do not contribute much to performance).
source share