>source

테이블 뷰가있는 사용자 dafault를 사용하여 로컬에 데이터를 저장하도록 구현했습니다. 모든 데이터를 삽입하면 테이블 뷰에 모든 데이터가 표시됩니다. 그러나 마지막 값을 멈춘 후 다시 실행하지 마십시오. 다음에 앱을 실행할 때 스 와이프하고 제거하면 작동하지 않습니다.

import UIKit
let defaults = UserDefaults(suiteName: "com.saving.data")
class HomeWorkViewController: UITableViewController {
    var rows = [String]()

viewDidload에서 getData () 메소드 호출

   override func viewDidLoad() {
        super.viewDidLoad()
        getData()
        // Do any additional setup after loading the view.
        self.navigationItem.rightBarButtonItem = self.editButtonItem
    }

getData () 메소드 호출

   override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        getData()
    }

storeData 메소드 호출

   override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(true)
        storeData()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    @IBAction func addButton(_ sender: Any) {
        addCell()
    }
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return rows.count
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "homeWork", for: indexPath)
        cell.textLabel?.text = rows[indexPath.row]
        return cell
    }
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            rows.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .fade)
            tableView.reloadData()
        }else if editingStyle == .insert {
        }
    }
    func addCell(){
        let alert = UIAlertController(title: "Add Home Work", message: "Input text", preferredStyle: .alert)
        alert.addTextField{(textField) in
    textField.placeholder = "text...."
        }
        alert.addAction(UIAlertAction(title: "Confirm", style: .default, handler: {[weak alert](_) in
            let row = alert?.textFields![0]
            self.rows.append((row?.text)!)
            self.tableView.reloadData()
        }))
        self.present(alert,animated: true, completion: nil)
        storeData()
    }
    func storeData(){
        defaults?.set(rows, forKey: "savedData")
        defaults?.synchronize()
    }

    func getData(){
     let data = defaults?.value(forKey: "savedData")
        if data != nil {
            rows = data as! [String]
        }else{}
    }
}


  • 답변 # 1

    storeData() 에 전화  잘못된 장소에서. 와이즈 비즈  폐쇄는 나중에 실행됩니다.

    addAction
    
    
    그리고 pyzwyz를 호출하지 마십시오   func addCell() { let alert = UIAlertController(title: "Add Home Work", message: "Input text", preferredStyle: .alert) alert.addTextField{(textField) in textField.placeholder = "text...." } alert.addAction(UIAlertAction(title: "Confirm", style: .default, handler: {[weak alert](_) in let row = alert?.textFields![0] let insertionIndex = self.rows.count self.rows.append(row.text!) self.tableView.insertRows(at: IndexPath(row: insertionIndex, section: 0), with: .automatic) self.storeData() })) self.present(alert,animated: true, completion: nil) } 에 전화 한 후

    reloadData
    
    

    deleteRows 의 전용 API를 사용하십시오.  ( override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { rows.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .fade) self.storeData() } } 에 전화하지 마십시오 )

    UserDefaults
    
    
    synchronize

관련 자료

  • 이전 vue.js - 이 curl 요청과 동등한 vue-apollo 옵션은 무엇입니까?
  • 다음 c++ - 텍스처 D3D11에 대한 렌더링 문제