Извлекать данные из Core Data и отображать в UITextFields с помощью Swift - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь извлечь данные из Core Data и отобразить их в UITextFields с помощью Swift.Я думаю, что я успешно сохранил в Core Data, используя этот код:

    func insertUserData() {

    let user = UserData(context: managedObjectContext)
    user.full_name = nameTextField.text!
    user.address = addressTextField.text!
    user.phone_number = phoneTextField.text!
    user.email = emailTextField.text!

    do {
    try managedObjectContext.save()
        print("Saved Successfully!")
    } catch {
        print(error.localizedDescription)
    }

}

, где UserData - это имя объекта в модели Core Data, а managedObjectContext:

let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

Теперь япытаюсь отобразить сохраненные данные в UITextFields в другом ViewController, используя этот код:

    func loadProfileData() {

    let entityDescription = NSEntityDescription.entity(forEntityName: "UserData", in: managedObjectContext)
    let request: NSFetchRequest<UserData> = UserData.fetchRequest()
    request.entity = entityDescription

    do {
        let userInfo = try managedObjectContext.fetch(request as! NSFetchRequest<NSFetchRequestResult>)
        let userInformation = userInfo as! NSManagedObject // I'm getting crash here: Cast from '[Any]' to unrelated type 'NSManagedObject' always fails
        nameField.text = userInformation.value(forKey: "name") as? String
        addressField.text = userInformation.value(forKey: "address") as? String
        phoneField.text = userInformation.value(forKey: "phone_number") as? String
        emailField.text = userInformation.value(forKey: "email") as? String
    } catch {
        print(error.localizedDescription)
    }

}

Отчет о сбое:

    libsystem_kernel.dylib`__pthread_kill:
    0x2105a70fc <+0>:  mov    x16, #0x148
    0x2105a7100 <+4>:  svc    #0x80
->  0x2105a7104 <+8>:  b.lo   0x180a6b11c               ; <+32>
    0x2105a7108 <+12>: stp    x29, x30, [sp, #-0x10]!
    0x2105a710c <+16>: mov    x29, sp
    0x2105a7110 <+20>: bl     0x180a607d4               ; cerror_nocancel
    0x2105a7114 <+24>: mov    sp, x29
    0x2105a7118 <+28>: ldp    x29, x30, [sp], #0x10
    0x2105a711c <+32>: ret 

Есть предложения, пожалуйста, чтобы решить эту проблему?Любой другой лучший подход?Спасибо за ваше время и усилия.Ответы с примерами кода очень ценятся.

1 Ответ

0 голосов
/ 10 февраля 2019
let userInfo = try managedObjectContext.fetch(request as! NSFetchRequest<NSFetchRequestResult>)

или более просто:

let userInfo = try managedObjectContext.fetch(request)

, поскольку вы уже определили request как

let request: NSFetchRequest<UserData> = UserData.fetchRequest()

userInfo, всегда возвращается как массив UserDataтак как запрос может вернуть более одного объекта (или ни одного).Вы должны проверить, что массив содержит хотя бы одну запись и использовать userInfo.first или что-либо, что лучше всего соответствует вашим потребностям.Очевидно, что вы можете использовать NSPredicate для фильтрации результатов по вашему выбору.

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