Thank you all for the replies!

As I said above, I don't want the question to be whether I should better
use NIBs, or whether Cocoa is more suitable than assembler. I somewhat know
already what the role of NIB is, that it can save time and so on. What I
would like to know is what to do if I was not using NIBs, i.e. if I wanted
to build as much as possible by hand.

To put it in other words, imagine I wanted to go to some city and was
asking about the best spots for hitchhiking. I know it's faster to get
there by a car and that I can use a train. And please, let's not argue
whether I should be hitchhiking in the first place.

Now, I have some code to share!

Please, I think I managed to write an app which seems to be working but I
would like to check whether I missed something. Here what I did:

- I have to use a bundle. That is, a folder with the following structure:
Contents
Contents/Info.plist
Contents/MasOS/<executable>

- Info.plist has to have:
CFBundleExecutable for <executable>
CFBundleName for the name of top-most folder (i.e. the bundle filename)
CFBundleDocumentTypes - which I don't yet understand and will get do it
bellow

- then, the other interesting thing I found out is that I don't need to
write AppDelegate (!). So, my main.m looks like:
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSApplication * application = [NSApplication sharedApplication];
    <a menu item which fires newDocument:>
    [application run];

- then, and this is the interesting bit, newDocument: gets automatically
routed to my NSDocumentClass from Info.plist and there I create the window,
the model, etc.:
- (id)init
{
   self = [super init];
   if (self) {
       NSRect contentSize = NSMakeRect(0.0f, 0.0f, 480.0f, 320.0f);
       window = [[NSWindow alloc] initWithContentRect:contentSize
styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:YES];
       <...>
       [window makeKeyAndOrderFront:self];
   }
   return self;
}

And when I hit apple-n, the new window pops-up! I also have to implement
dataOfType: and readFromData: - that comes next.

But I have lots of questions:

- I saw that Xcode named the Info.plist differently (it prepends my project
name to it) - is it ok just to call it Info.plist? Is there any convention?

- this CFBundleDocumentTypes - what if I wanted to have only one kind of
documents? Does it have to be an array as well? What is the absolute
minimum every CFBundleDocumentTypes must contain?

- is it really the case that I don't need the AppDelegate? It currently
makes sense to me but maybe I'm missing something?

- I don't want to put the window in init, where else should I put it? Does
NSDocument have an equivalent of applicationDidFinishLaunching, i.e. when
the document is created is there any callback fired?

- new windows are positioned over the previous ones - I know this is
because of that NSMakeRect() - the application created using Xcode (with
NIBs) put every new window slightly to the right, slightly below the
previous window - what is responsible for it? The NIB?

Lots of questions, I know. Thank you in advance for any help with answering
these!
_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to