Я новичок в этом, поэтому я изложу, что я делаю, и, пожалуйста, исправьте любые ошибки.Связывание какао с новым NSManagedObject
В моем приложении AppDelegate у меня есть @property для подкласса NSManagedObject, «Entry». При нажатии кнопки на главном окне, чтобы создать новую запись, я первый экземпляр свойства:
_entry = (Entry*)[NSEntityDescription
insertNewObjectForEntityForName:@"Entry"
inManagedObjectContext:[self managedObjectContext]];
затем открыть новое окно, вызвав
[inputWindow makeKeyAndOrderFront:nil];
Это inputWindow имеет какао привязки свойства записи. Когда я представляю, я обычный сохранить
[[self managedObjectContext] save:&error];
, а затем
[inputWindow performClose:nil];
Это кажется довольно прямо вперед, но я получаю сообщение об ошибке:
2014-01-11 22:57:32.906 WriteOffs[66441:303] CoreData: error: Failed to call designated initializer on NSManagedObject class 'Entry'
2014-01-11 22:57:32.943 WriteOffs[66441:303] An uncaught exception was raised
2014-01-11 22:57:32.943 WriteOffs[66441:303] [<Entry 0x6100000ba040> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "date".
Кажется, что запись является нулевым , подразумевая, что inputWindow и его привязки создаются до того, как я нажму кнопку в главном окне, чтобы создать новую запись и открыть inputWindow.
Похоже, что есть простое решение, которое мне не хватает.
EDIT:
Вот что у меня есть. В WOAppDelegate.h,
#import <Cocoa/Cocoa.h>
#import "Entry.h"
@interface WOAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSWindow *inputWindow;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
- (IBAction)saveAction:(id)sender;
@property (weak, nonatomic) Entry *entry;
@end
Тогда в WOAppDelegate.m
#import "WOAppDelegate.h"
@implementation WOAppDelegate
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize managedObjectContext = _managedObjectContext;
@synthesize inputWindow = _inputWindow;
@synthesize entry = _entry;
// Core Data Stuff...
Entry.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Entry : NSManagedObject
@property (nonatomic, retain) NSNumber * amount;
@property (nonatomic, retain) NSString * category;
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSString * payee;
@property (nonatomic, retain) NSString * text;
@end
Entry.m
#import "Entry.h"
@implementation Entry
@dynamic amount;
@dynamic category;
@dynamic date;
@dynamic images;
@dynamic payee;
@dynamic text;
@end
Довольно просто. В моем MainMenu.xib у меня есть главное окно и inputWindow. У меня есть контроллер массива, связанный с managedObjectContext, который заполняет содержимое таблицы в главном окне. У меня также есть второе окно для ввода новых записей в таблицу. Это связано с имуществом, въезд.
Еще раз спасибо за помощь,
Chet
Я не писал никаких методов в Entry.m. Я прокомментировал почти весь мой код. Все, что у меня есть, это свойство/@ и связанное/@ синтезирование в AppDelegate, и я все еще получаю эту ошибку. Я думаю, что происходит, когда окно ввода загружается (сразу) до того, как объект привязки будет создан. Я попытался создать экземпляр объекта awakeFromNib, но это не сработало. Я действительно не уверен, что я здесь делаю. Спасибо за помощь. – Chet
Вы пробовали logging self.managedObjectContext, чтобы убедиться, что это не ноль? Можете ли вы опубликовать, что осталось от вашего Entry.h и Entry.m (удалить закомментированные части), чтобы мы могли видеть код? –
не уверен, где записывать self.managedObjectContext. Я положил его в applicationDidFinishLaunching, и программа потерпела крах, прежде чем перейти к нему. Также см. Мое редактирование для получения дополнительного кода и объяснения проблемы. – Chet