CoreData работает, но возвращает еще один объект nil в консоли? - PullRequest
0 голосов
/ 30 января 2019

Прежде всего, спасибо заранее за любую помощь, спасибо за ваше время:)

У меня нет никаких ошибок или проблем, но моя консоль печатает ноль при получении данных с Базовые данные и Swift 4 .

Вот мой код:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext


 //Fetch from Core Data

        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")


        //request.predicate = NSPredicate(format: "age = %@", "12")
        request.returnsObjectsAsFaults = false
        do {
            let result = try context.fetch(request)
            for data in result as! [NSManagedObject] {
                print(data.value(forKey: "username") as Any) // ou as? String
                print(data.value(forKey: "date_naissance") as Any) // ou as? String
            }

        } catch {

            print("Failed")
        } 

Вот мой вывод на консоль:

Необязательно (julien) Необязательно (1994-09-09 04:34:00 +0000) nil nil

Если я получу только одно значение, консоль покажет только один nil.Каждое напечатанное значение получает ноль.

Кроме того, мой предыдущий код был

print(data.value(forKey: "username") as! String)

Но он падал после печати значения в консоли (хотя значение было напечатано).

Так что я исправил это, напечатав как Any, но теперь я получаю nils после.

Я просто хотел бы знать, нормально ли это, поскольку на данный момент это не влияет на мое приложение, но, вероятно, скоро.

Спасибо за ваше время, помощь и поддержку :)

Хорошего дня!Julien

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Большое спасибо, ребята, за вашу помощь.

Я сделал то, что мне показалось более логичным (даже если бы я лучше написал свой код, это правда).

Спасибо Βασίλης Δ, vadian (а также wvteijlingen за редактирование моего поста).:)

Итак, Мартин получил ответ, я разместил его здесь, чтобы он был помечен как решенный, спасибо, Мартин.Я снял «опционально» с моей модели CoreData, и я больше не печатаю эти значения nil, так что это круто :)

Приятного дня, ребята, и большое спасибо!:)

0 голосов
/ 30 января 2019

Попробуйте изменить код с помощью цикла на этот

do {
    let result = try context.fetch(request)
    for data in result as! [NSManagedObject] {
         if let userName = data.value(forKey: "username") as? String {
              print(userName)
          }
          if let dateNaissance = data.value(forKey: "date_naissance") as? String {
              print(dateNaissance)
          }
        }

    } catch {

        print("Failed")
    }

Проверьте документацию необязательно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...