Подтвердить что ты не робот

Основные данные: абстрактная сущность в запросе на выборку

Предположим, что у меня есть модель Core Data с абстрактным объектом, называемым "Animal". Затем у меня есть много других объектов, которые наследуются от этого абстрактного объекта: "Лев", "Собака", "Кошка" и т.д. (Я не разрабатываю программу зоопарка, но эта аналогия хорошо подходит для проблемы, которую я объясняю!)

Я хочу знать: могу ли я получить "всех животных" сразу, сделав это:

NSFetchRequest *searchRequest = [[NSFetchRequest alloc] init];
[searchRequest setEntity:[NSEntityDescription entityForName:@"Animal" inManagedObjectContext:aContext]];

NSArray *matchedObjects = [aContext executeFetchRequest:searchRequest error:nil];

Я понимаю, что есть методы в NSEntityDescription, чтобы определить, наследует ли объект от другого. Но есть ли быстрый способ захватить все сущности, относящиеся к конкретному (абстрактному) типу - в данном случае "Животное"?

Если вышеприведенный подход недействителен, каков наиболее эффективный способ сделать это? Спасибо!

4b9b3361

Ответ 1

Вы можете определенно использовать этот подход.

Из руководства по программированию ядра Apple Core:

Наследование объектов работает аналогично наследованию класса; и полезен по тем же причинам. Если у вас есть несколько объектов, которые похожи, вы можете разделить общие свойства на сущность, также известную как родительский объект. Вместо того, чтобы указывать одни и те же свойства в нескольких объектах, вы можете определить их в одном объекте, а субтитцы наследуют их. Например, вы можете определить объект Person с атрибутами firstName и lastName, а также субтитры Employee и Customer, которые наследуют эти атрибуты.

Ответ 2

Я сделал что-то подобное, однако этот объект не был абстрактным. Это был стандартный объект (без экземпляров), а другие объекты, которые я выбрал, были получены из этого объекта. Я не пробовал это с абстрактным классом, однако, глядя на документы, кажется, что это может быть невозможно:

Руководство по программированию основных данных

Абстрактные объекты Вы можете указать, что субъект является абстрактным, то есть вы не будете создавать какие-либо экземпляры это лицо. Вы обычно делаете абстрактный объект, если у вас есть номер сущностей, которые все представляют специализации (наследовать) которая не должна сама быть инстанцированным. Например, в вы можете использовать Графический объект, который определяет атрибуты для координат x и y, цвета и чертежные границы. Вы никогда, создать экземпляр графика. бетон Субъекты Graphic могут быть Circle, TextArea и Line.

Мое предложение состояло бы в том, чтобы разобраться с абстрактным существом Animal и дать ему шанс. Если это не сработает, просто сделайте объект Animal не абстрактным (слова терпят неудачу, это то, что мы бы назвали? Возможно, "конкретный" лучше?), И все должно быть в порядке. Если кто-то сделал это с абстрактным классом, я бы услышал об этом.