2016-12-29 21 views
0

我有一個TableViewController,其中包含使用CoreData的數據輸入列表。我也有ViewControllerUITextView由Segue鏈接到TableViewController。我已經完成了對項目的添加,保存和刪除等操作。在Swift中編輯TableViewCell的內容列表

現在我通過。我已創建做了ViewController.I我能夠使用Segue公司從所選單元格的數據傳遞給下一次的TextView的ViewController行動下一ViewController連接選定TableViewCellUITextView工作的編輯。

現在,我需要更新UITextView上的編輯文本,方法是單擊DONE按鈕返回到TableViewController的單元格,並將數據保存到CoreData。 Plzz給出了真正的建議和建議....我是Swift的新手,我已經在這裏附上了我的代碼。

import UIKit 
import CoreData 

class ToDoTableViewController: UITableViewController { 
var listItems = [NSManagedObject]() 

override func viewDidLoad() { 
super.viewDidLoad() 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.add, target: self , action: #selector(ToDoTableViewController.addItem)) 
} 

func addItem(){ 
let alertController = UIAlertController(title: "To Do Tasks Lists!!!!", message: "Write Down...", preferredStyle: .alert) 
let confirmAction = UIAlertAction(title: "Confirm", style: UIAlertActionStyle.default, handler: ({ 
    (_) in 
    if let field = alertController.textFields![0] as? UITextField { 
     self.saveItem(itemToSave: (field.text!)) 
     self.tableView.reloadData() 
    } 
    } 
)) 

let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil) 
alertController.addTextField(configurationHandler: ({ 
    (textField) in 
    textField.placeholder = "Type in Something!!!!" 
})) 

alertController.addAction(confirmAction) 
alertController.addAction(cancelAction) 
self.present(alertController, animated: true, completion: nil) 
} 

func saveItem(itemToSave : String){ 
let appDelegate = UIApplication.shared.delegate as! AppDelegate 
let managedContext = appDelegate.managedObjectContext 
let entity = NSEntityDescription.entity(forEntityName: "ListEntity", in: managedContext) 
let item = NSManagedObject(entity: entity!, insertInto: managedContext) 
item.setValue(itemToSave, forKey: "item") 
do { 
    try managedContext.save() 
    listItems.append(item) 
} 
catch { 

    print("Error") 
} 
} 

override func viewWillAppear(_ animated: Bool) { 
let appDelegate = UIApplication.shared.delegate as! AppDelegate 
let managedContext = appDelegate.managedObjectContext 
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ListEntity") 

do{ 
    let results = try managedContext.fetch(fetchRequest) 
    listItems = results as! [NSManagedObject] 
} 
catch { 
    print("Error") 
} 
} 

override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
return true 
} 

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
if editingStyle == .delete { 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let managedContext = appDelegate.managedObjectContext 
    let objectToDelete = listItems[indexPath.row] 
    listItems.remove(at: indexPath.row) 
    managedContext.delete(objectToDelete) 
    tableView.deleteRows(at: [indexPath], with: .fade) 
    do { 
     try managedContext.save() 
    } 
    catch { 
     print("Error") 
    } 
} 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
return listItems.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! as UITableViewCell 
let item = listItems[indexPath.row] 
cell.textLabel?.text = item.value(forKey: "item") as! String? 
cell.backgroundColor = UIColor.clear 
return cell 
} 

func getIndexPathForSelectedCell() -> IndexPath? 
{ 
var indexPath2:IndexPath? 
if tableView.indexPathsForSelectedRows!.count > 0 { 
    indexPath2 = tableView.indexPathsForSelectedRows![0] 
} 
return indexPath2 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if (segue.identifier == "detailView") 
{ 
    if let indexPath2 = getIndexPathForSelectedCell() 
    { 
     // here write code for move to next controller. 
     let vc = segue.destination as! TextEditViewController 
     //vc.FirstString = listItems[(indexPath2 as NSIndexPath).row] as String 

     let item = listItems[(indexPath2 as NSIndexPath).row] 
     vc.FirstString = (item.value(forKey: "item") as! String?)! 
    } 
} 
} 

} 


//TextEditViewController 
import UIKit 
import CoreData 
class TextEditViewController: UIViewController { 
@IBOutlet weak var textEdit: UITextView! 
var FirstString = String()  

override func viewDidLoad() { 
super.viewDidLoad() 
textEdit.text = FirstString 
print(self.FirstString) 
} 

override func didReceiveMemoryWarning() { 
super.didReceiveMemoryWarning() 
// Dispose of any resources that can be recreated. 
} 

} 
+0

打印項目數據並進行調試,並檢查它 –

+0

Himanshu Moradiya @ U沒有任何想法,,, ...ü這裏只是爲upvotes和批准的誘餌。你以前沒有解決我的問題! –

+0

您是否想在secondVC上編輯後在coredata中更新您的文本,並將其顯示在FirstVC上的tableview中? –

回答

0

通過您的CoreData模型參考下一個畫面:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if (segue.identifier == "detailView") 
{ 
    if let indexPath2 = getIndexPathForSelectedCell() 
    { 
     // here write code for move to next controller. 
     let vc = segue.destination as! TextEditViewController 
     //vc.FirstString = listItems[(indexPath2 as NSIndexPath).row] as String 
     let item = listItems[(indexPath2 as NSIndexPath).row] 
     vc.FirstString = (item.value(forKey: "item") as! String?)! 
     vc.recentItem = item; //Like this. Create a recentItem refrence to your next controller of NSManagedObject or your custom core data modal. 
    } 
} 
} 

當你與你的編輯做在TextEditViewController

recentItem.item = "String" //Your updated string 

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let managedContext = appDelegate.managedObjectContext 
do { 
     try managedContext.save() 
    } 
    catch { 
     print("Error") 
    } 

希望這將工作...!

+0

我應該在哪裏添加這位爵士? recentItem.item =「String」//您更新的字符串 讓appDelegate = UIApplication.shared.delegate as! AppDelegate的 讓managedContext = appDelegate.managedObjectContext DO { 嘗試managedContext.save() } 趕上{ 打印( 「錯誤」) }。如果U希望可以編輯的問題,我問。 @ Dheeraj D –

+0

當你完成編輯時,在你的TextViewController中編寫recent.item = string。和完成按鈕操作 –

+0

中的所有重新編碼讓我檢查並將恢復您 –