2009-10-12 6 views
2

У меня есть подкласс NSManagedObject, созданный интерфейсом модели XCode.
В этом классе есть члены NSString и NSNumber, а также член NSDate.Cocoa-Touch, NSManagedObject: Исключение при настройке свойства

При попытке установить элемент NSDate, я получаю следующее исключение:
2009-10-12 21:53:32.228 xxx[2435:20b] Failed to call designated initializer on NSManagedObject class 'Item'
2009-10-12 21:53:32.228 xxx[2435:20b] *** -[Item setDate:]: unrecognized selector sent to instance 0x3f7ed30
2009-10-12 21:53:32.229 xxx[2435:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[Item setDate:]: unrecognized selector sent to instance 0x3f7ed30'

Параметр дата так же, как и другие, за исключением того, что вместо того, чтобы быть

@property (nonatomic, retain) NS{String,Number}* propname; 

это

@property (nonatomic, retain) NSDate *date; 

BTW, Item экземпляр я возлагая на просто обычный [[Item alloc] init], никакого связанного контекста или чего-либо еще.

Сначала я думал, что мой NSDate * неисправен, тогда я попытался назначить его [NSDate date] и даже ноль. Он все еще падает.

Любые идеи?

+0

Что означает эта нотация «NS {String, Number}»? –

+1

@ValeryPavlov это от bash, он расширяется до NSString и NSNumber. Не работает в ObjC, это просто быстрее ввести этот путь. Например. Пример {1,2,3} расширяется до примера 1, пример 2, пример 3. – Prody

ответ

9

Вы не можете создать экземпляр NSManagedObject подкласса не связанный с ним NSManagedObjectContext (ну вы может, как вы показали, но результаты почти наверняка не будете, что вы хотите).

Первая строка из журнала намеков на это:

2009-10-12 21:53:32.228 xxx[2435:20b] Failed to call designated initializer on NSManagedObject class 'Item' 

Всех классы Objective-C есть (по соглашению) в назначенного инициализатора, который является методом инициализатора, что должен назвать, либо явно или через другой инициализатор удобства. В случае NSManagedObject это -[NSManagedObject initWithEntity:insertIntoManagedObjectContext:]. Невыполнение назначенного инициализатора приводит к неопределенному и, вероятно, неправильному поведению, потому что экземпляр не гарантированно правильно инициализирован. Я предполагаю, что инициализатор NSManagedObject устанавливает оборудование для поддержки доступа к свойствам объекта Entity для @synthesize 'd. Без этого механизма экземпляр может не подумать, что он может ответить на вызовы @synthesize, и ваш вызов на setData: приведет к тому, что селектор не обнаружит ошибку.

+0

О, я тоже постараюсь добавить контекст. Довольно странно, потому что только это свойство терпит неудачу. – Prody

+0

Я подозреваю, что несогласованность в неудаче с другими свойствами - это удача. –

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