Это очень распространенная ошибка.
Заполнитель %@
предназначен только для объектов, для Int32
вам нужно %d
или %i
let predicate = NSPredicate(format: "id == %d", id)
Исоздайте запрос на выборку с конкретным подклассом NSManagedObject
let fetchRequest = NSFetchRequest<EmployeeTime>(entityName: "EmployeeTime")
, что позволит избежать приведения типа позже.
Весь ваш код может быть упрощен (дополнительные опции не требуются):
let employTime:EmployeeTime
let context = getContext()
let fetchRequest = NSFetchRequest<EmployeeTime>(entityName: "EmployeeTime")
let predicate = NSPredicate(format: "id == %d", id)
fetchRequest.predicate = predicate
let employTimes = try! context.fetch(fetchRequest)
if let et = employTimes.first {
employTime = et
} else {
employTime = EmployeeTime(context: context)
}
return employTime
Однако вам следует избегать try!
.Сделайте вашу функцию throw
и передайте потенциальную ошибку вызывающей стороне.