2017-10-13 13 views
0

Je développe des données de base dans mon application. Je souhaite récupérer l'attribut name à partir des données de base.Récupérer des attributs spécifiques à partir de coredata swift

classe ViewController: UIViewController {

@IBOutlet weak var saveDataBtn:UIButton! 
@IBOutlet weak var dataTxtField:UITextField! 
@IBOutlet weak var dataLbl:UILabel! 
var tasks: [Task] = [] 
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

@IBAction func saveDataBtnPressed(_sender : UIButton){ 
    print("Save Data.") 
    let task = Task(context: context) 
    task.name = dataTxtField.text 
    (UIApplication.shared.delegate as! AppDelegate).saveContext() 
    getData() 
} 

func getData(){ 
    do{ 
     tasks = try context.fetch(Task.fetchRequest()) 

    }catch{ 
     print("Fetching Failed") 

    } 

} 

I am attaching my xcdatamodel

Comment puis-je obtenir?

Merci,

+0

Récupère l'objet Task qui vous intéresse et lit sa propriété "name". –

+0

J'ai déjà chercher l'objet de tâche. mais je ne suis pas capable de lire la propriété de nom – user12346

+0

Pouvez-vous s'il vous plaît laissez-moi savoir comment puis-je obtenir la propriété de nom de l'objet de tâche – user12346

Répondre

1

Swift 4, vous pouvez accéder à la propriété directement.

do { 
    let tasks = try context.fetch(request) 
    for task in tasks { 
     print(task.name) 
    } 
} catch let error { 
    print(error.localizedDescription) 
} 

MISE À JOUR - Comment supprimer et mettre à jour une instance d'une entité.

Voici quelques idées pour organiser le code pour gérer la mise à jour et la suppression.

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

extension Task { 
    // to get an instance with specific name 
    class func instance(with name: String) -> Task? { 
     let request = Task.fetchRequest() 

     // create an NSPredicate to get the instance you want to make change 
     let predicate = NSPredicate(format: "name = %@", name) 
     request.predicate = predicate 

     do { 
      let tasks = try context.fetch(request) 
      return tasks.first 
     } catch let error { 
      print(error.localizedDescription) 
      return nil 
     } 
    } 

    // to update an instance with specific name 
    func updateName(with name: String) { 
     self.name = name 
     (UIApplication.shared.delegate as! AppDelegate).saveContext() 
    } 

    // to delete an instance 
    func delete() { 
     context.delete(self) 
     (UIApplication.shared.delegate as! AppDelegate).saveContext() 
    } 
} 

func howItWorks() { 
    guard let task = Task.instance(with: "a task's name") else { return } 
    task.updateName(with: "the new name") 
    task.delete() 
} 
+0

Merci! ça a marché :) – user12346

+0

Avez-vous une idée sur la mise à jour et la suppression d'une ligne spécifique dans swift 4? – user12346

+0

J'ai mis à jour la réponse. Mais je suggère toujours de lire ceci, https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/index.html. – mrfour