我已经阅读了一堆 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.
我究竟做错了什么?我想在文本字段中输入,保存文件,再次打开它并查看那里的文本。