2014-01-12 1 views
0

Я новичок в этом, поэтому я изложу, что я делаю, и, пожалуйста, исправьте любые ошибки.Связывание какао с новым 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

ответ

0

ли ваш класс «Entry», может быть, переопределить некоторые из методов в NSManagedObject? Возможно, даже

- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context;  

Если это так, вы не можете вызвать -super в любом из методов вашего подкласса?

+0

Я не писал никаких методов в Entry.m. Я прокомментировал почти весь мой код. Все, что у меня есть, это свойство/@ и связанное/@ синтезирование в AppDelegate, и я все еще получаю эту ошибку. Я думаю, что происходит, когда окно ввода загружается (сразу) до того, как объект привязки будет создан. Я попытался создать экземпляр объекта awakeFromNib, но это не сработало. Я действительно не уверен, что я здесь делаю. Спасибо за помощь. – Chet

+0

Вы пробовали logging self.managedObjectContext, чтобы убедиться, что это не ноль? Можете ли вы опубликовать, что осталось от вашего Entry.h и Entry.m (удалить закомментированные части), чтобы мы могли видеть код? –

+0

не уверен, где записывать self.managedObjectContext. Я положил его в applicationDidFinishLaunching, и программа потерпела крах, прежде чем перейти к нему. Также см. Мое редактирование для получения дополнительного кода и объяснения проблемы. – Chet

0

В контроллере массива у меня был режим: класс, ссылающийся на класс Entry. Я изменил это на режим: Entity, ссылающийся на объект Entry, и все получилось. :)

Может кто-нибудь прокомментировать, почему отладчик настолько плох, чтобы дать значимый отклик? Где в сообщении об ошибке могло указывать на то, что это ошибка?

2014-01-12 18:35:31.520 WriteOffs[68395:303] CoreData: error: Failed to call designated initializer on NSManagedObject class 'Entry' 
2014-01-12 18:35:31.555 WriteOffs[68395:303] An uncaught exception was raised 
2014-01-12 18:35:31.555 WriteOffs[68395:303] [<Entry 0x6100000a9a20> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "date". 
2014-01-12 18:35:31.556 WriteOffs[68395:303] (
    0 CoreFoundation      0x00007fff8b93f41c __exceptionPreprocess + 172 
    1 libobjc.A.dylib      0x00007fff944f3e75 objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff8b93efc9 -[NSException raise] + 9 
    3 CoreData       0x00007fff89650b14 -[NSManagedObject valueForUndefinedKey:] + 276 
    4 Foundation       0x00007fff91eff49f -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 334 
    5 AppKit        0x00007fff89c872d3 -[NSBinder valueForBinding:atIndex:resolveMarkersToPlaceholders:] + 408 
    6 AppKit        0x00007fff89963567 -[NSValueBinder _adjustObject:mode:observedController:observedKeyPath:context:editableState:adjustState:] + 622 
    7 AppKit        0x00007fff8a022008 -[NSValueBinder updateTableColumnDataCell:forDisplayAtIndex:] + 143 
    8 AppKit        0x00007fff89f9e2ee -[NSTextValueBinder updateTableColumnDataCell:forDisplayAtIndex:] + 73 
    9 CoreFoundation      0x00007fff8b873639 __53-[__NSArrayM enumerateObjectsWithOptions:usingBlock:]_block_invoke + 137 
    10 CoreFoundation      0x00007fff8b872ddf -[__NSArrayM enumerateObjectsWithOptions:usingBlock:] + 319 
    11 AppKit        0x00007fff8a062ac7 -[_NSBindingAdaptor tableColumn:willDisplayCell:row:] + 108 
    12 AppKit        0x00007fff89b8ada0 -[NSTableView preparedCellAtColumn:row:] + 615 
    13 AppKit        0x00007fff89b8a9ee -[NSTableView _drawContentsAtRow:column:withCellFrame:] + 44 
    14 AppKit        0x00007fff89b8a723 -[NSTableView drawRow:clipRect:] + 1629 
    15 AppKit        0x00007fff89b89f7d -[NSTableView drawRowIndexes:clipRect:] + 776 
    16 AppKit        0x00007fff89a534c2 -[NSTableView drawRect:] + 1484 
    17 AppKit        0x00007fff89a2c399 -[NSView _drawRect:clip:] + 3748 
    18 AppKit        0x00007fff89a2ac0e -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1799 
    19 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    20 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    21 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    22 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    23 AppKit        0x00007fff89a28a50 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 841 
    24 AppKit        0x00007fff89a28201 -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 314 
    25 AppKit        0x00007fff89a25209 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 2828 
    26 AppKit        0x00007fff89a0463a -[NSView displayIfNeeded] + 1680 
    27 AppKit        0x00007fff89a1e246 -[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 1972 
    28 AppKit        0x00007fff89a1d7f0 -[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 786 
    29 AppKit        0x00007fff89a1d470 -[NSWindow orderWindow:relativeTo:] + 162 
    30 AppKit        0x00007fff898bbc26 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1406 
    31 AppKit        0x00007fff898b05fe loadNib + 327 
    32 AppKit        0x00007fff898afb9c +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 288 
    33 AppKit        0x00007fff898af98c -[NSBundle(NSNibLoading) loadNibNamed:owner:topLevelObjects:] + 197 
    34 AppKit        0x00007fff898af77b +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 357 
    35 AppKit        0x00007fff898ab617 NSApplicationMain + 448 
    36 WriteOffs       0x0000000100002e02 main + 34 
    37 libdyld.dylib      0x00007fff8eddf5fd start + 1 
    38 ???         0x0000000000000003 0x0 + 3 
) 
2014-01-12 18:35:31.640 WriteOffs[68395:303] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Entry 0x6100000a9a20> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "date".' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00007fff8b93f41c __exceptionPreprocess + 172 
    1 libobjc.A.dylib      0x00007fff944f3e75 objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff8b93efc9 -[NSException raise] + 9 
    3 CoreData       0x00007fff89650b14 -[NSManagedObject valueForUndefinedKey:] + 276 
    4 Foundation       0x00007fff91eff49f -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 334 
    5 AppKit        0x00007fff89c872d3 -[NSBinder valueForBinding:atIndex:resolveMarkersToPlaceholders:] + 408 
    6 AppKit        0x00007fff89963567 -[NSValueBinder _adjustObject:mode:observedController:observedKeyPath:context:editableState:adjustState:] + 622 
    7 AppKit        0x00007fff8a022008 -[NSValueBinder updateTableColumnDataCell:forDisplayAtIndex:] + 143 
    8 AppKit        0x00007fff89f9e2ee -[NSTextValueBinder updateTableColumnDataCell:forDisplayAtIndex:] + 73 
    9 CoreFoundation      0x00007fff8b873639 __53-[__NSArrayM enumerateObjectsWithOptions:usingBlock:]_block_invoke + 137 
    10 CoreFoundation      0x00007fff8b872ddf -[__NSArrayM enumerateObjectsWithOptions:usingBlock:] + 319 
    11 AppKit        0x00007fff8a062ac7 -[_NSBindingAdaptor tableColumn:willDisplayCell:row:] + 108 
    12 AppKit        0x00007fff89b8ada0 -[NSTableView preparedCellAtColumn:row:] + 615 
    13 AppKit        0x00007fff89b8a9ee -[NSTableView _drawContentsAtRow:column:withCellFrame:] + 44 
    14 AppKit        0x00007fff89b8a723 -[NSTableView drawRow:clipRect:] + 1629 
    15 AppKit        0x00007fff89b89f7d -[NSTableView drawRowIndexes:clipRect:] + 776 
    16 AppKit        0x00007fff89a534c2 -[NSTableView drawRect:] + 1484 
    17 AppKit        0x00007fff89a2c399 -[NSView _drawRect:clip:] + 3748 
    18 AppKit        0x00007fff89a2ac0e -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1799 
    19 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    20 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    21 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    22 AppKit        0x00007fff89a2afea -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2787 
    23 AppKit        0x00007fff89a28a50 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 841 
    24 AppKit        0x00007fff89a28201 -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 314 
    25 AppKit        0x00007fff89a25209 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 2828 
    26 AppKit        0x00007fff89a0463a -[NSView displayIfNeeded] + 1680 
    27 AppKit        0x00007fff89a1e246 -[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 1972 
    28 AppKit        0x00007fff89a1d7f0 -[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 786 
    29 AppKit        0x00007fff89a1d470 -[NSWindow orderWindow:relativeTo:] + 162 
    30 AppKit        0x00007fff898bbc26 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1406 
    31 AppKit        0x00007fff898b05fe loadNib + 327 
    32 AppKit        0x00007fff898afb9c +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 288 
    33 AppKit        0x00007fff898af98c -[NSBundle(NSNibLoading) loadNibNamed:owner:topLevelObjects:] + 197 
    34 AppKit        0x00007fff898af77b +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 357 
    35 AppKit        0x00007fff898ab617 NSApplicationMain + 448 
    36 WriteOffs       0x0000000100002e02 main + 34 
    37 libdyld.dylib      0x00007fff8eddf5fd start + 1 
    38 ???         0x0000000000000003 0x0 + 3 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException