Dear Quincey,

thank you very much for your infos and hints.
What you write makes sense to me.
I've read the documentation that you pointed me to before. And on
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Documents/Tasks/ImplementingDocApp.html

in the section "Implementing a Document-Based Application" I found I noce table that said, that only the implementation of the subclass of NSDocument is required. That's why I have put everything into the same class. But this seems not to work for Archiving the model data as I learn now.

Thank you very much

Best regards
Arno


Am 18.08.2011 09:40, schrieb Quincey Morris:
On Aug 17, 2011, at 04:34 , Arno Oesterheld wrote:

I am a beginner with Xcode and Objective-C and stuck with a quite simple thing for over two days now. I hope you can help me.

My Project is deployed for OS X 10.6, it uses Garbage Collection and I am using Xcode 4.0.1.

I made a multi document application starting with the template provided by Xcode. I just have one class as subclass of NSDocument.

For opening documents I use initWithCoder. The decoding mithin this method works fine - I get the values that were saved. But these values are "lost" when I would like to use them in an other method (of the same class).

I assume that I make some mistakes with using the right comibation of init: / initWithCoder: / initWithContentsOfURL: etc. The self-object does always have a different adress in the initWithCoder method then in the other methods. I tried plenty of combinations of the above methods and even tried to call differend methods in the super class (NSDocument) within initWithCoder.

Well, it's hard to answer your questions very clearly, because you have some basic confusions here. You're going to have to go back and study the documentation some more, and possibly get hold of a Cocoa tutorial boom that leads you through some of the basics.

I think the central (but not only) point of confusion is that you seem to be trying to archive a NSDocument object. This isn't how it works. The NSDocument object (well, your subclass object) is a transient object, created when you open the document and destroyed when you close it.

The *contents* of your document, also known as your data model, is what is archived, usually to a file. It's an object or a hierarchy of objects of some *other* class than NSDocument.

So, it makes no sense to declare your NSDocument subclass as conforming to NSCoding.

I think what's happening now (very roughly, since you didn't show enough code to be sure of this) is that you're archiving a NSDocument object as your data model. When you re-open the document file, you unarchive the object, which contains the archived data (so there is the *appearance* that it did something right). Now you have 2 NSDocument objects -- the one that was created for you as a result of opening the document file, and the one that was unarchived. The second one isn't expecting to be created this way, and it kind of messes things up.

Try reading here:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html#//apple_ref/doc/uid/TP40002974-CH6-SW1

especially about the MVC pattern. The NSDocument object is a *controller*. Your archived data is a *model*.

You're also going to need to understand the information here:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Documents/Concepts/OverviewDocArchitecture.html#//apple_ref/doc/uid/20000023-BAJBBBAH


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to