Невозможно сохранить / получить данные из основного хранилища данных в Swift - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь создать простое приложение для хранения и извлечения пользовательских данных.

Иметь RegisterViewController.swift с полями (name, loginUsername, loginPassword, photo), которые пользователи вводят для регистрации.

У меня есть класс User.swift для сохранения этой информации в объекте

Используя CoreData, я настроил сущность «Пользователи» с 4 полями в качестве атрибутов.

Я сослался на следующеессылки для сохранения и извлечения данных в таблицу Users.
https://medium.com/xcblog/core-data-with-swift-4-for-beginners-1fc067cca707. https://www.bobthedeveloper.io/blog/beginner-guide-to-core-data-in-swift

Однако я не вижу данных, сохраняемых или извлекаемых при отладке.Также я не вижу никаких исключений.

Ниже приведен фрагмент кода

let name = self.name.text;
let loginUsername = self.loginUsername.text;
let loginPassword = self.loginPassword.text;
let photo = self.photo.image;

print("Setting user data in the User object");
user = User(name: name!, loginUsername: loginUsername!, loginPassword: loginPassword!, photo: photo)!;

print("store data in DB")
//Setup delegate and context 
let appDelegate = UIApplication.shared.delegate as! AppDelegate;
let context = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Users", in: context);
let newUser = NSManagedObject(entity: entity!, insertInto: context)

//Set values for the attributes        
newUser.setValue(name, forKey: "name")
newUser.setValue(loginUsername, forKey: "loginUsername")
newUser.setValue(loginPassword, forKey: "loginPassword")
//TODO: store the photo

//Save data         
do {
    print("Trying to same")
    try context.save()
 } catch {
    print("Failed to save user")
    let nserror = error as NSError
    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
 }

 //Method 1: to get Users after saving       
 do {
     usersSaved = try context.fetch(Users.fetchRequest())
 } catch {
     print("Failed to fetch users")
     let nserror = error as NSError
     fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
 }

 //Method 2: to get Users after saving
 var usersSaved: [Users] = []
 let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users");
 request.returnsObjectsAsFaults = false
 do {
    let result = try context.fetch(request)
     print("Trying to fetch")
     for data in result as! [NSManagedObject] {
         print(data.value(forKey: "name") as! String)
     }
  } catch {
    print("Failed")
  }

Это мой класс User.swift

class User {

    //MARK: Properties
    var name: String;
    var loginUsername: String;
    var loginPassword: String;
    var photo: UIImage? = nil;

    //MARK: Initialization
    init?(name: String, loginUsername: String, loginPassword: String, photo: UIImage?) {

        //Initialization should fail if there is no name or username or password
        if (name.isEmpty || loginUsername.isEmpty || loginPassword.isEmpty) {
            return nil;
        }

        //Initialize stored properties
        self.name = name;
        self.loginUsername = loginUsername;
        self.loginPassword = loginPassword;
        self.photo = photo;
     }
}

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

1 Ответ

0 голосов
/ 25 сентября 2018

Я отвечаю на свой вопрос для тех, кто может столкнуться с этой проблемой. Спасибо @ Paulw11 за предложения. Xcode ведет себя странно, и мне пришлось выполнить Project -> Очистить несколько раз и удалить папку DerivedData до того, как сущности CoreData были разрешены.

Это то, что я сделал

func storeUserData() {

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

    //store data
    let newUser = Users(context: context);
    newUser.name = self.name.text;
    newUser.loginUsername = self.loginUsername.text;
    newUser.loginPassword = self.loginPassword.text;

    appDelegate.saveContext();

    //retrieve data
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users");
    request.returnsObjectsAsFaults = false
    do {
        print("Fetching from DB")
        let result = try context.fetch(request)
        //printing data
        for data in result as! [NSManagedObject] {
            print(data.value(forKey: "name") as! String)
            print(data.value(forKey: "loginUsername") as! String)
            print(data.value(forKey: "loginPassword") as! String)
        }
    } catch {
        print("Failed to fetch")
        let nserror = error as NSError
        fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...