Я занимаюсь разработкой приложения с использованием CoreData.
У меня есть 5 сущностей (A, B, C, D, E), и 90% атрибутов каждой сущности являются общими. 10% разные.
Я создал массив [NSManageObject] для хранения fetchRequest выбранного объекта. До этого момента все работает.
Вот мой код fetchRequest. Прежде всего я сделал расширение NSManagedObjectContext:
extension NSManagedObjectContext {
func fetchMOs (_ entityName: String, sortBy: [NSSortDescriptor]? = nil, predicate: NSPredicate? = nil) throws -> [NSManagedObject] {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
request.returnsObjectsAsFaults = false
request.predicate = predicate
request.sortDescriptors = sortBy
return try! self.fetch(request) as! [NSManagedObject]
}
}
Затем я запрашиваю данные, вызывая эту функцию в контексте:
documentArray = try! context.fetchMOs(requestedEntity!, sortBy: requestedSortBy, predicate: requestedPredicate)
Проблема возникает, когда я хочу получить доступ к атрибутам выбранного объекта для работы с ними.
Например, я выбрал сущность A, и fetchRequest сохранил данные в массиве [NSManageObject]. Теперь я хочу напечатать один атрибут объекта:
[NSManageObject] .attribute1 <- но это неверно.
Должно быть: [A] .attribute1 </p>
Полагаю, я мог бы сделать оператор switch для downcast и работать с данными:
Switch entitySelected {
Case “A”:
arrayOfMO as! [A]
arrayOfMO.attribute1 ......
И так для каждой сущности. Но мне кажется, что должен быть более чистый способ сделать это.
Данные, хранящиеся в объектах, являются строками, и я хочу с ними просто заполнить метки и кнопки в tableViewController.
Спасибо.