2016-10-12 2 views
0

내 pickerView에서 특정 행에 대한 작업을 수행하려고 할 때 문제가 발생합니다.picker보기 및 동작 단추

예, pickerView에 여러 항목이 있는데 핵심 데이터에 카운터 특성이 있으므로 pickerView에서 특정 항목을 선택하고 해당 카운터 특성을 하나씩 증가시켜야합니다. 여기

내가 시도 것입니다 : 나는 버튼 기능에서 사용할 수 있도록

var MEDARRAY = [NSManagedObject]() 
var Counter:NSInteger? 
var thecounte:Int? 

@IBOutlet weak var thepicker: UIPickerView! 


func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return MEDARRAY.count 
} 
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    self.view.endEditing(true) 
    return String(describing: MEDARRAY[row].value(forKey: "medName")!) 
} 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    let NumDay = self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger 
    let NumMed = self.MEDARRAY[row].value(forKey: "medNum") as? NSInteger 
    Counter = (self.MEDARRAY[row].value(forKey: "takenCounter") as? NSInteger)! 
    TotalDose.text = String(NumDay! * NumMed!) 
    RemainDose.text = String(Int(TotalDose.text!)! - Counter!) 

} 
//here is the button should increase the counter 
    @IBAction func Taken(_ sender: AnyObject) { 
    let Appdelegate = UIApplication.shared.delegate as? AppDelegate 
    let context = Appdelegate?.persistentContainer.viewContext 
    let newCounter = Counter! + 1 
    do{ 
     // how to specified the did selected row in here to update the counter value for that row 
     self.MEDARRAY[newCounter].setValue(newCounter, forKey: "takenCounter") 
     try context?.save() 
    }catch{ 
     print(error) 
    } 
} 

어떻게 피커 뷰의 한 선택된 행을 지정할 수 있습니다?

+0

버튼 동작에서 선택한 행을 선택기로 표시 하시겠습니까? – Sujit

+0

정확하게 코어 데이터에서 선택된 해당 객체의 값을 수정할 수 있습니다. – ammari

답변

0

당신과 같이 selectedObject라는 또 다른 변수를 작성하는 경우 :

var selectedObject = NSManagedObject() 

을 그리고 당신의 pickerViewDidSelectRow 방법으로 업데이트 : 당신의 버튼을 누를 때

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    let NumDay = self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger 
    let NumMed = self.MEDARRAY[row].value(forKey: "medNum") as? NSInteger 
    Counter = (self.MEDARRAY[row].value(forKey: "takenCounter") as? NSInteger)! 

    //updates whenever a new row is selected 
    selectedObject = self.MEDARRAY[row] 

    TotalDose.text = String(NumDay! * NumMed!) 
    RemainDose.text = String(Int(TotalDose.text!)! - Counter!) 
} 

그런 다음 당신이 호출 할 수 있습니다, 그것은 것 가장 최근에 선택된 행을 제공하여 "개수"필드를 증가시킬 수 있습니다.

@IBAction func Taken(_ sender: AnyObject) { 
    let Appdelegate = UIApplication.shared.delegate as? AppDelegate 
    let context = Appdelegate?.persistentContainer.viewContext 
    let newCounter = Counter! + 1 
    do{ 
     //initialize index variable 
     let index = MEDARRAY.indexOf(selectedObject) 

     //use index in your MEDARRAY call 
     self.MEDARRAY[index].setValue(newCounter, forKey: "takenCounter") 
     try context?.save() 
    }catch{ 
     print(error) 
    } 
} 
+0

"오류가 발생했습니다."(NSMANAGEDOBJECT의 유형) 인수 목록과 함께 'index'를 호출 할 수 없습니다. – ammari

+0

방금 ​​확인한 후 작동합니다. NSManagedObject]가 아닌 NSManagedObject를 입력하도록 selectedObject를 설정 했습니까? –

+0

Benjamin 님, 도움을 주셔서 감사합니다. – ammari