Ответ 1
Во-первых, вы не можете использовать свойство transient в NSFetchRequest
, которое идет против хранилища SQLite. Когда вы используете SQLite, NSFetchRequest
переводится в sql и выполняется против базы данных задолго до того, как ваш переходный процесс когда-либо коснется.
Кроме того, вам не следует внедрять аксессуры, вместо этого вы должны использовать @synthesize
.
Затем, если вы хотите установить свойство переходного процесса, вы должны установить его в -awakeFromFetch
и/или -awakeFromInsert
вместо переопределения получателя.
Затем ваше свойство должно называться underwater
, а определение @property
должно быть:
@property (nonatomic, retain, getter=isUnderwater) NSNumber *underwater;
Примечание. Несмотря на то, что вы объявляете его логическим в своей модели, он по-прежнему является NSNumber
в коде.
Наконец, установка необязательного флага в свойство transient не имеет значения, так как в любом случае он будет отброшен.
Update
Если объекты находятся в памяти, вы можете применить дополнительные фильтры (даже против переходных свойств). Единственное ограничение заключается в том, что вы не можете использовать переходные свойства, когда вы отправляетесь в файл SQLite.
Например, вы можете выполнить NSFetchRequest
, который загружается во всех сущностях. Затем вы можете сразу применить второй NSPredicate
к возвращенному NSArray
и далее фильтровать объекты вниз.