Невозможно выполнить запрос из CoreData в swift 3

#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 не были сохранены должным образом. Я проверил другие поля, и это сработало, затем я решил проблему из источника.