2

私は基本的なテキスト エディターを作成しており、読み取りメソッドを実装する必要があります。私は NSDocument を使用しているので、メソッドをオーバーライドすることにしました- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError

以下は、メソッドの私のコードです。

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
    BOOL readSuccess = NO;
    NSString *fileContents = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    if (!fileContents && outError) {
    *outError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileReadUnknownError userInfo:nil];
    }

    if (fileContents) {
    readSuccess = YES;

    [textView setString: fileContents];
    NSLog(@"%@",[textView string]);
    }
    return YES;
}

NSLogNULL を返します。xib の textView オブジェクトを textView プロパティ ファイルの所有者 (NSDocument サブクラス) に接続しました。コードの何が問題になっていますか?

私のソース ファイルは、NSDocument サブクラス インターフェイスと実装ファイル (GNDocument.h および .m) だけです。MainMenu.xib と GNDocument.xib の 2 つの xib ファイルがあります (ファイルの所有者は GNDocument に設定されています)。文字列をコンソールに NSLog できます。唯一の問題は、既に接続を行っているにもかかわらず、NSTextView がファイルの所有者に接続されていないようです (ファイル所有者の textView プロパティから NSTextView にドラッグします)。

なぜうまくいかないのか本当にわからないので、誰かが私を啓発してくれることを願っています。正しい方向、または少なくともいくつかのヒントを教えてください。ありがとう。

4

1 に答える 1

1

私は答えを見つけました。接続に問題はありません。何が起こるかは、私がを使用してファイルを読んだ後です

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError  

次に、setString:を

- (void)windowControllerDidLoadNib:(NSWindowController *)aController

ファイルから読み取った文字列を別のNSStringivarに保持して、windowControllerDidLoadNibメソッドに渡すことができるようにする必要があります。

以前私が間違っていたのは、windowControllerがnibファイルをロードする前にあるfileメソッドを開いて読み取るのと同じメソッドでsetString:を設定したことです。したがって、textViewはその前には存在しません。

于 2012-09-10T14:48:48.007 に答える