我已經經歷了一堆Core Data示例和Apple文檔。在完成這一整天的工作後,我在牆上。可可綁定:NSObjectController不是KVC兼容的代表對象屬性
我想要發生的一切是我在文本字段中輸入一些文本,保存文件,再次打開並查看文本。
我做了一個非常簡單的基於Core Data文檔的應用程序進行實驗。這裏是詳細信息:
1)數據模型有一個實體(「注」)與一個屬性(「標題」),這是一個NSString。
2)我創建了一個視圖控制器「ManagingViewController」,該視圖控制器在一個名爲「NoteView」的視圖中加載到MyDocument.xib中的一個框中,沒有問題。 NoteView.nib中只有一個NSTextField。
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
我有一個NSManagedObject稱爲 「Note.h」
#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。我不需要一個數組控制器的權利?我希望能夠打開同一個應用程序的多個窗口,但我仍然不認爲我需要一個數組控制器?所有的例子都有一個NSTableView和一個添加按鈕,因爲我沒有NSTableView,所以不需要添加按鈕。
3)值NSTextView綁定我已綁定到「註釋對象控制器」與代表對象的控制器鍵和標題的模型關鍵路徑。
當我運行我的應用程序,我得到
[<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.
我在做什麼錯?我想輸入文本字段,保存文件,再次打開並查看文本。
好的,所以我有許多Core Data教程使用NSArrayController和arrangedObjects(沒有使用NSObjectController)。我假設如果我回來並完全理解綁定在這些示例中的工作方式,然後使用NSObjectController和內容來應用這些知識,我應該讓它工作。 如果那是真的,我還有一個問題。 NSArrayController示例調用add:選擇器(當在表中創建新行時)。是否有NSObjectController所需的等價物? 謝謝 – Mark 2009-12-29 04:17:30
關鍵要注意的是,在IB中,控制器鍵和模型鍵路徑是分開的。這是有原因的:第一個鍵(Controller Key)訪問控制器的某些屬性,其值是模型的一部分;關鍵路徑的其餘部分(模型關鍵路徑)向下鑽入模型中以訪問更多基本對象,例如字符串和圖像以供視圖顯示。這是Cocoa在您的應用程序中預期並實施MVC分離的許多方法之一。 – 2009-12-29 04:38:28
你應該把'add:'作爲一個單獨的問題,因爲它與這個問題無關。 – 2009-12-29 04:39:58