2017-06-02 26 views
0

我在學校項目的應用程序上工作。該應用程序應管理不同的客戶(使用客戶名稱和電子郵件地址)和任務(使用任務名稱和每小時價格)。 那麼應用程序應該從這些數據創建一個帳單。來自選取器視圖中的核心數據的數據

我的問題是如何從客戶和任務(存儲在覈心數據中)在兩個選擇器視圖中獲取數據?

鏈接到完整的項目:https://drive.google.com/open?id=0Bwwqhrg9CBVfTU50R2dBaF9ZcUk

(對不起,採用德國的變量和函數名:/)

這是資源的任務

// 
// ArrayAufgabenResource.swift 
// TheServiceAppV2 
// 
// Created by David Zerweck on 09.04.17. 
// Copyright © 2017 David Zerweck. All rights reserved. 
// 

//////////////////////////////////////////////////// 
    //German = English 

    //Kunde = Customer 
    //Aufgabe = Task 
//////////////////////////////////////////////////// 
import Foundation 
import CoreData 

struct ArrayAufgabeResource: AufgabeResource { 

var persistentContainer: NSPersistentContainer = { 

    let container = NSPersistentContainer(name: "TheServiceAppV2") 
    container.loadPersistentStores { 
     (storeDescription, error) in 

     if let error = error { 
      let nserror = error as NSError 
      fatalError("Fehler: \(nserror.localizedDescription)") 
     } 
    } 
    return container 
}() 

func saveContext() { 
    let context = persistentContainer.viewContext 
    if context.hasChanges { 
     do { 
      try context.save() 
     } catch { 
      let nserror = error as NSError 
      fatalError("Fehler: \(nserror.localizedDescription)") 
     } 
    } 
} 

func insertAufgabe(withName: String, andPreis: String) -> Aufgabe { 
    let newAufgabe = NSEntityDescription.insertNewObject(forEntityName: "Aufgabe", into: persistentContainer.viewContext) as! Aufgabe 

    newAufgabe.nameDerAufgabe = withName 
    newAufgabe.preisProStunde = andPreis 

    saveContext() 
    return newAufgabe 
} 

func remove(aufgabe: Aufgabe) { 
    persistentContainer.viewContext.delete(aufgabe) 
    saveContext() 
} 

func getList() -> [Aufgabe] { 
    var aufgaben = [Aufgabe]() 

    let request: NSFetchRequest<Aufgabe> = Aufgabe.fetchRequest() 
    do { 
     aufgaben = try persistentContainer.viewContext.fetch(request) 
    } catch { 
     print(error.localizedDescription) 
    } 

    return aufgaben 
} 
} 

這是客戶資源

// 
// ArrayKundenResource.swift 
// TheServiceAppV2 
// 
// Created by David Zerweck on 09.04.17. 
// Copyright © 2017 David Zerweck. All rights reserved. 
// 

import Foundation 
import CoreData 

struct ArrayKundeResource: KundeResource { 

var persistentContainer: NSPersistentContainer = { 

    let container = NSPersistentContainer(name: "TheServiceAppV2") 
    container.loadPersistentStores { 
     (storeDescription, error) in 

     if let error = error { 
      let nserror = error as NSError 
      fatalError("Fehler: \(nserror.localizedDescription)") 
     } 
    } 

    return container 
}() 

func saveContext() { 
    let context = persistentContainer.viewContext 
    if context.hasChanges { 
     do { 
      try context.save() 
     } catch { 
      let nserror = error as NSError 
      fatalError("Fehler: \(nserror.localizedDescription)") 
     } 
    } 
} 

func insertKunde(withName: String, andEmail: String) -> Kunde { 

    let newKunde = NSEntityDescription.insertNewObject(forEntityName: "Kunde", into: persistentContainer.viewContext) as! Kunde 

    newKunde.name = withName 
    newKunde.email = andEmail 

    saveContext() 

    return newKunde 
} 

func remove(kunde: Kunde) { 
    persistentContainer.viewContext.delete(kunde) 
    saveContext() 
} 


func getList() -> [Kunde] { 
    var kunden = [Kunde]() 

    let request: NSFetchRequest<Kunde> = Kunde.fetchRequest() 
    do { 
     kunden = try persistentContainer.viewContext.fetch(request) 
    } catch { 
     print(error.localizedDescription) 
    } 

    return kunden 
} 
} 

在下面的ViewCon troller,應該有兩個選擇器的意見。第一個選擇器視圖應顯示客戶。第二個選擇器視圖應顯示任務。

// 
// RechnungViewController.swift 
// TheServiceAppV2 
// 
// Created by David Zerweck on 17.05.17. 
// Copyright © 2017 David Zerweck. All rights reserved. 
// 

//////////////////////////////////////////////////// 
//German = English 

//Kunde = Customer 
//Aufgabe = Task 
//Rechnung = Bill 
//////////////////////////////////////////////////// 

import UIKit 

class RechnungViewController: UIViewController { 


@IBOutlet weak var pickerViewKunde: UIPickerView! 

@IBOutlet weak var pickerViewAufgabe: UIPickerView! 

@IBOutlet weak var anzahlStundenField: UITextField! //number of hours 


@IBAction func rechnungBtn(_ sender: Any) { 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 

我希望有人能幫助我。 我已經在說謝謝你的幫助。

回答

0

你可以得到數據,如下面的代碼:

這裏是你的控制器,請簡單地複製粘貼,並得到它的工作。

import UIKit 

class RechnungViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource { 


@IBOutlet weak var pickerViewKunde: UIPickerView! 

@IBOutlet weak var pickerViewAufgabe: UIPickerView! 

@IBOutlet weak var anzahlStundenField: UITextField! 


var allKunden = [Kunde]() 

@IBAction func rechnungBtn(_ sender: Any) { 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    //Temp Add data 
    var kun = Kunde() 
    let arr : ArrayKundeResource = ArrayKundeResource() 
    kun = arr.insertKunde(withName: "JIGAR", andEmail: "[email protected]") 
    print(kun.email) 
    print(kun.name) 
//This is for temporary adding data inside coredata so you can remove this. 

    //get all customer 
    self.getAllCustomer() 
} 

func getAllCustomer() { 

    let arr : ArrayKundeResource = ArrayKundeResource() 
    self.allKunden = arr.getList() 

    print(self.allKunden.count) 
} 

//pickerview datasource methods 
func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return self.allKunden.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    let kundObj = self.allKunden[row] as Kunde 
    return kundObj.name 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    let kundObj = self.allKunden[row] as Kunde 
    print(kundObj.name) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

}