1

我已经阅读了一堆 Core Data 示例和 Apple 文档。经过一整天的工作后,我陷入了困境。

我想要发生的只是在文本字段中输入一些文本,保存文件,再次打开它并在那里查看文本。

我制作了一个非常简单的基于 Core Data 文档的应用程序来进行实验。以下是详细信息:

1) 数据模型有一个实体(“Note”)和一个属性(“title”),它是一个 NSString。

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

管理视图控制器.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。我不需要数组控制器对吗?我确实希望能够为同一个应用程序打开多个窗口,但我仍然不认为我需要数组控制器吗?所有示例都有一个 NSTableView 和一个添加按钮。这里不需要添加按钮,因为我没有 NSTableView)。

3) 值的 NSTextView 绑定我将它绑定到“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 回答