Ошибка Objective C: 'активное' Свойство является скалярным типом на классе 'Стандартная программа'. Не может генерировать метод получателя для него

Код в моем предыдущем ответе может быть упрощен до:

def test_afunction_throws_exception(self):
    self.assertRaises(ExpectedException, afunction)

И если afunction берет аргументы, просто передайте их в assertRaises как это:

def test_afunction_throws_exception(self):
    self.assertRaises(ExpectedException, afunction, arg1, arg2)
7
задан higginbotham 20 July 2009 в 06:55
поделиться

2 ответа

Все, что выходит с компакт-диска, является объектом, а не масштабатором. Итак, измените свой код на:

@interface Routine : NSManagedObject {

}

@property (nonatomic) NSNumber * active;

@implementation Routine
@dynamic active
@end

Если вы хотите, вы можете добавить удобный аксессор, чтобы работать с ним как с скаляром:

- (BOOL) activeScalar {
  return self.active.boolValue;
}

- (void) setActiveScalar:(BOOL)active_ {
  self.active = [NSNumber numberWithBool:active_];
}

Наконец, если вы, удерживая клавишу Control, щелкните свойство в редакторе модели, появится огромный контекстное меню, включая параметры для копирования соответствующих объявлений и определений на панель вставки, чтобы вам не приходилось писать их самостоятельно.

17
ответ дан 6 December 2019 в 10:02
поделиться

Что бы это ни стоило, я обнаружил, что документы предоставляют несколько иное решение для скаляров. Обычно вам не рекомендуется использовать скаляры вместо объектов, но если вы это сделаете, то http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdNSAttributes.html объясняет, как это сделать. Вы используете "primitiveName" и "setPrimitiveName" для доступа к автоматически сгенерированным средствам доступа, которые помещают ваш скаляр в объект (например, NSNumber). Затем создайте скаляр @property и напишите аксессоры для вашего свойства, которые используют примитивы.

Это кажется дорогостоящим, поскольку внутри CoreData хранит ваш атрибут как скаляр в постоянном хранилище и преобразует его в объект, чтобы представить его как примитив. Итак, когда вы реализуете setName, когда я читаю документы и образец кода, ваше значение помещается в объект, а затем скаляр снова извлекается в автоматической реализации setPrimitiveName. Похоже на ненужный маршалинг туда и обратно для каждого получения или установки.

2
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: