Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NSDocument/NSFileWrapper troubles



I'm having troubles with some NSDocument code that I, a Cocoa newbie, wrote. I'm trying to preserve an NSFileWrapper passed by loadFileWrapperRepresentation:ofType: within the NSDocument. If I create a new file, I can save it, even multiple times, and all's well and good. However, when I load a file from disk and try to save it again, my application crashes.

If I comment out my "wrapper = newWrapper" line in loadFileWrapperRepresentation, the application runs and saves, albeit without loading any of the data. This looks eerily like a simple retain problem, but if it is, my newbie eye certainly can't find it.

I sliced the detailed pieces for loading and saving out of the routines. What's left is enough to cause the crashing behavior when saving files, which actually occurs after the loading/saving is complete during the event loop, not anywhere that's easily debuggable.

~ Chris Erbach



// From CocoaDream.h:

@interface CocoaDream : NSDocument
{
NSFileWrapper * wrapper;
IBOutlet NSTextView * entryBody;
IBOutlet NSFormCell * subjectBox;
IBOutlet NSFormCell * dateBox;
}

// From CocoaDream.m:

- (BOOL)loadFileWrapperRepresentation:(NSFileWrapper *)newWrapper ofType:(NSString *)type {
NSEnumerator * fileEnum;
id curFile;
NSMutableDictionary * metadata;
NSString ** error = nil;

[newWrapper retain];
[wrapper release]; // Useless, logically, conventionally, valuable
wrapper = newWrapper; // Commenting this line prevents the crashes

return true;
}

- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
[super windowControllerDidLoadNib:aController];

[wrapper release];

if (wrapper == nil) {
// Only used if we haven't loaded a wrapper, earlier, from loadFileWrapperRepresentation yet
wrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:[[NSDictionary alloc] init]];
}
}

- (NSFileWrapper *)fileWrapperRepresentationOfType:(NSString *)type {
NSMutableDictionary * metaData = [[NSMutableDictionary alloc] init];
NSData * htmlData = nil;
NSString ** error = nil;

return wrapper;
}
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.