1

私は一連の Core Data の例と Apple のドキュメントを見てきました。一日中これに取り組んだ後、私は壁にいます。

私がやりたいことは、テキスト フィールドにテキストを入力し、ファイルを保存し、もう一度開いてそこにテキストを表示することだけです。

実験用に非常にシンプルな Core Data ドキュメント ベースのアプリを作成しました。詳細は次のとおりです。

1) データ モデルには、NSString である 1 つの属性 ("title") を持つ 1 つのエンティティ ("Note") があります。

2)「NoteView」というビューをMyDocument.xibのボックスに問題なくロードするView Controller「ManagingViewController」を作成しました。NoteView.nib には NSTextField が 1 つだけ含まれています。

ManagingViewController.h

#import <Cocoa/Cocoa.h>
#import "Note.h"

@interface ManagingViewController : NSViewController {
NSManagedObjectContext *managedObjectContext;
IBOutlet NSTextField *title;

}
@property (retain) NSManagedObjectContext *managedObjectContext;
@property (retain, readwrite) NSTextField *title;
@end

および ManagingViewController.m

#import "ManagingViewController.h"
#import "Note.h"

@implementation ManagingViewController
@synthesize managedObjectContext;
@synthesize title;

- (id)init
{

    if (![super initWithNibName:@"NoteView" bundle:nil]) {
        return nil;
    }

    return self;

}
@end

「Note.h」という NSManagedObject があります

#import <CoreData/CoreData.h>
#import "ManagingViewController.h"
@interface Note :  NSManagedObject  
{
}
@property (nonatomic, retain) NSString * title;
@end

および .m ファイル:

#import "Note.h"
#import "ManagingViewController.h"
@implementation Note 
@dynamic title;
@end

NoteView.nib では、次のようになります。

1) ファイルの所有者は ManagingViewController であり、テキスト フィールドとビューへの IBOutlets が接続されています。

2) NSObjectController オブジェクトを、"Note Object Controller" という Interface Builder ドキュメント ウィンドウにドラッグしました。モードを「エンティティ」に設定し、エンティティ名を「メモ」に設定しました。「コンテンツを準備する」と「編集可能」にチェックが入っています。(私が実行して見つけたすべての例では、ここで NSArrayController を使用しています。配列コントローラーは必要ありませんよね? 同じアプリで複数のウィンドウを開くことができるようにしたいのですが、まだそうは思いませんarraycontroller が必要ですか? すべての例には NSTableView と追加ボタンがあります.ここでは NSTableView を持っていないので、追加ボタンは必要ありません)。

3) 値の NSTextView バインディング。私はそれを、presentedObject のコントローラー キーと title のモデル キー パスを使用して "Note Object Controller" にバインドしました。

アプリを実行すると、

[<NSObjectController 0x20004c200> addObserver:<NSTextValueBinder 0x20009eee0>
forKeyPath:@"representedObject.title" options:0x0 context:0x20009f380] was 
sent to an object that is not KVC-compliant for the "representedObject" property.

私は何を間違っていますか?テキスト フィールドに入力してファイルを保存し、再度開いてそこにテキストを表示したいと考えています。

4

1 に答える 1

4
[<NSObjectController 0x20004c200> addObserver:<NSTextValueBinder 0x20009eee0> forKeyPath:@"representedObject.title" options:0x0 context:0x20009f380] was sent to an object that is not KVC-compliant for the "representedObject" property.

私は何を間違っていますか?

エラー メッセージは、何が間違っているかを示しています。オブジェクト コントローラーのrepresentedObjectプロパティにバインドしようとしていますが、オブジェクト コントローラーがありません。存在しないプロパティへのバインドは機能しません。

Note は NSObjectController のコンテンツ オブジェクトであるため、バインドする必要があるコントローラー キーは次のとおりcontentです。

于 2009-12-29T02:18:08.910 に答える