Cocoa绑定:对于representedObject属性,NSObjectController不符合KVC

Cocoa绑定:对于representedObject属性,NSObjectController不符合KVC,cocoa,core-data,nsobject,Cocoa,Core Data,Nsobject,我已经阅读了大量的核心数据示例和苹果的文档。我干了一整天这件事后感到很不舒服 我想做的就是在文本字段中键入一些文本,保存文件,再次打开,然后在那里看到文本 我制作了一个非常简单的基于核心数据文档的应用程序来进行实验。详情如下: 1) 数据模型有一个实体(“注释”)和一个属性(“标题”),该属性是NSString 2) 我创建了一个视图控制器“ManagingViewController”,它在名为“NoteView”的视图中加载到MyDocument.xib中的一个框中,没有问题。NoteVie

我已经阅读了大量的核心数据示例和苹果的文档。我干了一整天这件事后感到很不舒服

我想做的就是在文本字段中键入一些文本,保存文件,再次打开,然后在那里看到文本

我制作了一个非常简单的基于核心数据文档的应用程序来进行实验。详情如下:

1) 数据模型有一个实体(“注释”)和一个属性(“标题”),该属性是NSString

2) 我创建了一个视图控制器“ManagingViewController”,它在名为“NoteView”的视图中加载到MyDocument.xib中的一个框中,没有问题。NoteView.nib中只有一个NSTextField

管理视图控制器

#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
我有一个名为“Note.h”的NSManagedObject

在NoteView.nib my中:

1) 文件的所有者是ManagingViewController,文本字段和视图的IBOutlet已连接

2) 我将NSObjectController对象拖到名为“Note object Controller”的Interface Builder文档窗口中。我将模式设置为“实体”,实体名称设置为“注释”。选中“准备内容”和“可编辑”。(我所做的和找到的所有示例都在这里使用NSArrayController。我不需要阵列控制器,对吗?我确实希望能够为同一个应用打开多个窗口,但我仍然不认为我需要阵列控制器?所有示例都有一个NSTableView和一个add按钮。因为我没有,所以这里不需要add按钮。)一个静态视图)

3) 值I的NSTextView绑定将其绑定到“Note Object Controller”,控制器键为representedObject,模型键路径为title

当我运行我的应用程序时,我得到

[<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.
[addObserver:
forKeyPath:@“representedObject.title”选项:0x0上下文:0x20009f380]被删除
发送到“representedObject”属性不符合KVC的对象。
我做错了什么?我想输入文本字段,保存文件,再次打开它,然后在那里看到文本

[addObserver:forKeyPath:@“representedObject.title”选项:0x0上下文:0x20009f380]已发送到与“representedObject”属性不兼容KVC的对象。
我做错了什么

错误消息告诉您做错了什么:您试图绑定到对象控制器的
representedObject
属性,但它没有。绑定到不存在的属性无法工作

注释是NSObjectController的内容对象,因此这是需要绑定到的控制器键:
content

[addObserver:forKeyPath:@“representedObject.title”选项:0x0上下文:0x20009f380]已发送到与“representedObject”属性不兼容KVC的对象。
我做错了什么

错误消息告诉您做错了什么:您试图绑定到对象控制器的
representedObject
属性,但它没有。绑定到不存在的属性无法工作


注释是NSObjectController的内容对象,因此这是您需要绑定到的控制器键:
content

好的,因此我有一些使用NSArrayController和arrangedObjects的核心数据教程(没有使用NSObjectController的)。我假设如果我回来并完全理解这些示例中的绑定是如何工作的,然后使用NSObjectController和内容应用这些知识,我应该让它工作。如果那是真的,我还有一个问题。NSArrayController示例调用add:selector(当在表中创建新行时)。NSObjectController是否需要一个等价物?感谢需要注意的关键是,在IB中,控制器密钥和模型密钥路径是分开的。这是有原因的:第一个键(控制器键)访问控制器的某些属性,其值是模型的某个部分;关键点路径的其余部分(模型关键点路径)深入到模型中,以访问视图要显示的更基本的对象,如字符串和图像。这是Cocoa期望并在你的应用程序中实施MVC分离的许多方式之一。你应该将
添加:
作为一个单独的问题来提问,因为它与这个问题无关。好的,我有一些使用NSArrayController和arrangedObjects的核心数据教程(没有使用NSObjectController的)。我假设如果我回来并完全理解这些示例中的绑定是如何工作的,然后使用NSObjectController和内容应用这些知识,我应该让它工作。如果那是真的,我还有一个问题。NSArrayController示例调用add:selector(当在表中创建新行时)。NSObjectController是否需要一个等价物?感谢需要注意的关键是,在IB中,控制器密钥和模型密钥路径是分开的。这是有原因的:第一个键(控制器键)访问控制器的某些属性,其值是模型的某个部分;关键点路径的其余部分(模型关键点路径)深入到模型中,以访问视图要显示的更基本的对象,如字符串和图像。这是Cocoa期望并在你的应用程序中实施MVC分离的多种方式之一。你应该将
add:
作为一个单独的问题提问,因为它与这个问题无关。
#import <CoreData/CoreData.h>
#import "ManagingViewController.h"
@interface Note :  NSManagedObject  
{
}
@property (nonatomic, retain) NSString * title;
@end
#import "Note.h"
#import "ManagingViewController.h"
@implementation Note 
@dynamic title;
@end
[<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.
[<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.