2017-10-13 2 views
0

Ich entwickle Kerndaten in meiner Anwendung. Ich möchte Name Attribut aus den Kerndaten holen.Holen Sie spezifische Attribute von coredata swift

Klasse 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

Wie kann ich es bekommen?

Danke,

+0

Rufen Sie das Task-Objekt ab, an dem Sie interessiert sind, und lesen Sie dessen Eigenschaft "name". –

+0

Ich habe bereits Task-Objekt abrufen. aber ich bin nicht in der Lage, Name Eigenschaft zu lesen – user12346

+0

Können Sie mich bitte wissen lassen, dass, wie kann ich die Namenseigenschaft von Aufgabenobjekt erhalten – user12346

Antwort

1

In Swift 4 können Sie die Unterkunft direkt zugreifen.

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

AKTUALISIERT - Wie löschen und eine Instanz einer Entität zu aktualisieren.

Hier sind einige Ideen, um den Code zu organisieren, um mit dem Aktualisieren und Löschen umzugehen.

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

Danke !! es hat funktioniert :) – user12346

+0

Haben Sie eine Idee zu aktualisieren und zu löschen bestimmte Zeile in swift 4? – user12346

+0

Ich habe die Antwort aktualisiert. Aber ich empfehle immer noch, dies zu lesen, https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/index.html. – mrfour