文档“Untitled”无法保存为“Untitled”

时间:2011-01-24 16:19:46

标签: objective-c cocoa nsdocument

我正在尝试使用this Apple walkthrough开发基于文档的mac应用程序,我遇到了保存文件的问题(最后一步)。我尝试保存文件后得到的错误是:文档“Untitled”无法保存为“ - 我正在尝试使用新文件名 - ”

我已经用Google搜索了,没有找到任何针对此错误的结果。我已经重新检查了代码,一切看起来都非常可靠。我想知道是否有人对这里可能出现的问题有任何直觉。

我的主要课程的代码是:

#import "MyDocument.h"

@implementation MyDocument

- (id)init
{
    self = [super init];
    if (self) {
        if (mString == nil) {
            mString = [[NSAttributedString alloc] initWithString:@""];
        }
    }
    return self;
}

- (NSAttributedString *) string { return [[mString retain] autorelease]; }

- (void) setString: (NSAttributedString *) newValue {
    if (mString != newValue) {
        if (mString) [mString release];
        mString = [newValue copy];
    }
}

- (void) textDidChange: (NSNotification *)notification {
    [self setString: [textView textStorage]];
}



- (NSString *)windowNibName
{
    // Override returning the nib file name of the document
    // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
    return @"MyDocument";
}

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

    if ([self string] != nil) {
        [[textView textStorage] setAttributedString: [self string]];
    }
}

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
    BOOL readSuccess = NO;
    NSAttributedString *fileContents = [[NSAttributedString alloc]
                                        initWithData:data options:NULL documentAttributes:NULL
                                        error:outError];
    if (fileContents) {
        readSuccess = YES;
        [self setString:fileContents];
        [fileContents release];
    }
    return readSuccess;
}

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
    NSData *data;
    [self setString:[textView textStorage]];
    NSMutableDictionary *dict = [NSDictionary dictionaryWithObject:NSRTFTextDocumentType
                                                            forKey:NSDocumentTypeDocumentAttribute];
    [textView breakUndoCoalescing];
    data = [[self string] dataFromRange:NSMakeRange(0, [[self string] length])
                     documentAttributes:dict error:outError];
    return data;
}

标题文件:

#import <Cocoa/Cocoa.h>

@interface MyDocument : NSDocument
{
    IBOutlet NSTextView *textView;
    NSAttributedString *mString;
}

- (NSAttributedString *)string;
- (void) setString: (NSAttributedString *)value;

@end

2 个答案:

答案 0 :(得分:0)

-dataOfType:error:方法中,当您为data分配内容时,您确定它不是零吗?返回nil将导致此错误。

答案 1 :(得分:0)

我从头开始重建项目,但有一个例外:我没有按照将MyDocument类拖到文件所有者的步骤。该教程是为之前版本的XCode编写的,尽管它说的是3.2版本(或者可能在该版本和现在已经发生了很多),但这一步是不必要的。