Подобный вопрос задавался ранее на SO. Я изучил каждый из них, но не смог найти полезный ответ, применимый к моему делу, так что вот. Мой вопрос состоит из двух частей. Но сначала позвольте мне объяснить основы.
У меня есть подкласс NSManagedObject
под названием Activity.
import Foundation
import CoreData
class Activity: NSManagedObject {
@NSManaged var endTime: NSDate
@NSManaged var id: NSNumber
@NSManaged var startTime: NSDate
@NSManaged var status: NSNumber
@NSManaged var actions: NSSet
@NSManaged var checkInAndOuts: NSSet
}
Этот класс имеет два отношения ко многим (действия, checkInAndOuts) с двумя другими классами. Ниже приведены эти классы.
Действие
import Foundation
import CoreData
class Action: NSManagedObject {
@NSManaged var desc: String
@NSManaged var id: NSNumber
@NSManaged var status: NSNumber
@NSManaged var name: String
@NSManaged var activity: Activity
}
Вход и выход
import Foundation
import CoreData
class CheckInAndOut: NSManagedObject {
@NSManaged var checkInDate: NSDate
@NSManaged var checkInUserId: NSNumber
@NSManaged var checkOutDate: NSDate
@NSManaged var checkOutUserId: NSNumber
@NSManaged var id: NSNumber
@NSManaged var activity: Activity
}
Одно действие может иметь несколько действий и CheckInAndOuts. В методе viewDidLoad
в VC я получаю массив действий.
Теперь о проблемах, с которыми я сталкиваюсь.
Использование NSPredicate
В Action есть свойство status
. Он может иметь только три значения; 1, 2, -1. Я хочу отфильтровать действия без статуса -1. Когда я попытался запустить следующий предикат для свойства actions
класса Activity, как описано здесь , я получил ошибку EXC_BAD_ACCESS.
let actionsPredicate = NSPredicate(format: "ANY actions.status != %@", -1)
Как я могу получить объекты Activity, у которых есть действия только со статусом 1 и 2?
Использование NSSortDescriptor
Другая проблема, с которой я столкнулся, — это попытка отсортировать свойство checkInAndOuts
. Это свойство содержит набор объектов CheckInAndOut. Я хочу, чтобы эти объекты были отсортированы в порядке возрастания по его свойству checkInDate
. Когда я запустил следующую строку кода,
let CIAODescriptor = NSSortDescriptor(key: "checkInAndOuts.checkInDate", ascending: true)
Сбой проекта из-за ошибки Ключ to-many здесь не разрешен.
Может ли кто-нибудь иметь опыт работы с основными данными, пожалуйста, протяните мне руку помощи? Я был бы очень признателен.
Спасибо.