Это потому, что на самом деле нет ивара с названием title, а также нет пары getter или setter. Вот почему вы используете @dynamic
, а не @synthesize
. Когда вы получаете доступ, например. название, это будет примерно так:
[myObject valueForKey:@"title"];
Аналогично, установка заголовка выглядит примерно так:
[myObject setValue:foo forKey:@"title"];
Таким образом, по сути, NSManagedObject является просто оболочкой для извлечения из базы данных или доступа из кэша, но вы никогда не получите доступ к некоторым реальным иварам объекта (вы можете попробовать функции времени выполнения для определения иваров подкласса NSManagedObject).
Если вы все еще хотите использовать [self.view title]
, вам нужно перезаписать его. Вот пример:
- (NSString *)title
{
NSString *value;
[self willAccessValueForKey:@"title"];
value = [self primitiveValueForKey:@"title"];
[self didAccessValueForKey:@"title"];
return value;
}
Конечно, это не атомный геттер и он медленнее обычного, но эй, это работает.