#xcode #core-data #swift3
#xcode #core-data #swift3
Вопрос:
Я использую эту функцию класса для поиска записи по одному полю. Проблема здесь в том, что это всегда возвращает nil, и если удалить предикат, он вернет любую строку из базы данных. Я использую Xcode v 8.0
class func visitorWithCode(code: String, inManagedObjectContext context: NSManagedObjectContext) -> Visitor? {
print(code)
var visitor: Visitor? = nil
let fetchRequest: NSFetchRequest<Visitor> = NSFetchRequest(entityName: "Visitor")
fetchRequest.predicate = NSPredicate(format: "barcodeNo == (code)")
fetchRequest.fetchLimit = 1
let fetchedData = try! context.fetch(fetchRequest)
if (!fetchedData.isEmpty) {
print(fetchedData.first)
visitor = fetchedData.first! as Visitor
return visitor
}
else {
return visitor
}
}
Комментарии:
1. Попробуйте
NSPredicate(format: "barcodeNo == %@", code)
вместо этого.2. уже пробовал, тот же результат.
3. Как определено свойство «barcodeNo»? Что
print(fetchRequest.predicate)
показывает?4. Вы также пробовали использовать
NSPredicate(format: "barcodeNo == %@", argumentsArray: [code])
? Пришлось преобразовать мои предикаты в этот формат, чтобы заставить их работать с Swift 3.0. Если я не использовалargumentsArray
и не делал то, что предложил @MartinR, это не сработало.5. Оказалось, что значения для barcodeNo не были сохранены должным образом. Я проверил другие поля, и это сработало, затем я решил проблему из источника.