2009-12-29 1 views
2

Я прошел через кучу примеров данных ядра и документации Apple. Я нахожусь у стены после работы над этим весь день.Cocoa Bindings: NSObjectController не соответствует KVC для свойства представленного объекта

Все, что я хочу, это ввести текст в текстовое поле, сохранить файл, открыть его снова и увидеть там текст.

Я сделал очень простое приложение на основе данных Core Data для эксперимента. Вот данные:

1) Модель данных имеет один объект («Примечание») с одним атрибутом («title»), который является 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 в окно документа Interface Builder под названием «Note Object Controller». Я установил режим на «Entity» и «Entity Name» на «Note». «Готовые материалы» и «Редактируемые» отмечены. (Все примеры, которые я сделал, и были в состоянии найти использование NSArrayController здесь. Мне не нужен контроллер массива правильно? Я хочу иметь возможность открывать несколько окон для одного и того же приложения, но я все еще не думаю, что я нужен массивный контроллер? На всех примерах есть кнопка NSTableView и кнопка добавления. Здесь нет необходимости в кнопке добавления, так как у меня нет NSTableView).

3) Связи NSTextView для значения. Я привязал его к «Note Object Controller» с помощью ключа контроллера представленного объекта Object и ключа ключа ключа заголовка.

Когда я запускаю мое приложение я получаю

[<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
[<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 свойству контроллера объекта, но не один. Привязка к свойствам, которые не существуют, не может работать.

Примечание. Объект содержимого NSObjectController, так что это ключ контроллера, который необходимо связать с: content.

+0

ОК, поэтому у меня есть ряд учебников по основным данным, которые используют NSArrayController и builtObjects (никто не использует NSObjectController). Я предполагаю, что если я вернусь и полностью пойму, как привязки работают в этих примерах, а затем применяйте эти знания, используя NSObjectController и контент, я должен работать. Если это правда, у меня есть еще один вопрос. Примеры NSArrayController называют add: selector (при создании новой строки в таблице). Есть ли эквивалент, необходимый для NSObjectController? Спасибо – Mark

+0

Главное, чтобы заметить, что в IB ключ контроллера и ключ ключа модели являются отдельными. Для этого есть причина: первый ключ (ключ контроллера) обращается к некоторому свойству контроллера, значение которого является частью вашей модели; остальная часть ключевого пути (путь ключа модели) сводится к модели для доступа к более основным объектам, таким как строки и изображения для отображения. Это один из многих способов, с помощью которых Cocoa ожидает и обеспечивает разделение MVC в вашем приложении. –

+0

Вы должны задать вопрос 'add:' как отдельный вопрос, так как он не имеет отношения к этому вопросу. –

 Смежные вопросы

  • Нет связанных вопросов^_^