如何保存数组。因此,在App重新启动后也是如此

时间:2018-11-28 08:08:03

标签: arrays swift

我想知道在关闭应用程序后如何使待办事项列表相同。在我的代码中,我首先声明了一个数组,我想知道在用户重新启动应用程序后如何为用户保存更新的数组。我在网上搜索了一些答案,但只发现了有关在情节提要中创建实体的旧想法。而且我很确定,到目前为止,必须有比手动添加更精美的东西。

如何在更新数组时保存该数组,以使它在应用重启后不会丢失?

我的代码:

$this->soapWrapper->add('cds', function ($service) {
      $service
        ->wsdl('http://192.168.100.40/findustomerService/findustomerService?wsdl');
    });

    $source='JSFT';
    $ubscomp='cdsS';
    $userid='JSFT';
    $branch='002';
    $service='cdsSCustomerService';
    $operation='QueryCustomer';
    $custno='00001882';
    $param=array(
               'SOURCE'=>$source,
               'UBSCOMP'=>$ubscomp,
               'USERID'=>$userid,
               'BRANCH'=>$branch,
               'SERVICE'=>$service,
               'OPERATION'=>$operation,
               'CUSTID'=>$custno);
    $response = $this->soapWrapper->call('cds.QueryCustomerIO',array($param));
    dd($response);

3 个答案:

答案 0 :(得分:2)

对于简单的字符串数组,请使用UserDefaults

  • 声明两种加载和保存数据的方法

    func loadDefaults()
    {
       self.checklist = UserDefaults.standard.array(forKey: "checklist") as? [String] ?? []
    }
    
    func saveDefaults()
    {
       UserDefaults.standard.set(self.checklist, forKey: "checklist")
    }
    
  • viewDidLoad中添加

    loadDefaults()
    
  • 在添加和删除项目后立即添加

    saveDefaults()
    

对于更复杂的数据,最好使用诸如Core Data之类的其他解决方案


注意:

使用API​​插入和删除单个行,而不是总是重新加载整个表视图。好处是动画很棒。

tableView:commit中,将myTableView.reloadData()替换为

myTableView.deleteRows(at: [indexPath], with: .automatic)

并在警报操作中将整个if表达式替换为

if !textf.text!.isEmpty {
   let indexPath = IndexPath(row: checklist.count, section: 0)
   checklist.append(textf.text!)
   myTableView.insertRows(at: [indexPath], with: .automatic)
}

并将变量checklist移到类中!

答案 1 :(得分:1)

找到此解决方案:

    // Use this code to fetch saved item list.
    if let items = UserDefaults.standard.value(forKey: "ItemListArray") as? [String] {
        print(items)
    }

    // Use this code to save your item list.
    let itemList = ["Item 1", "Item 2", "Item 3", "Item 4"]
    UserDefaults.standard.setValue(itemList, forKey: "ItemListArray")


    // Use this code to remove item list
    UserDefaults.standard.setValue(nil, forKey: "ItemListArray")

答案 2 :(得分:1)

检查以下代码:-

class ClassUserDefaults {

static let shared = ClassUserDefaults()

// MARK: - SETTER GETTER 
var selectedChecklist: [String]? {

    get {
        guard let savedItem =  (UserDefaults.standard.object(forKey: "selectedChecklist")) as? Data else { return nil }
        guard let data = NSKeyedUnarchiver.unarchiveObject(with: savedItem) as? [String]? else { return nil}
        return data
    }
    set {
        guard let value = newValue else {
            UserDefaults.standard.removeObject(forKey: "selectedChecklist")
            return
        }
        let item = NSKeyedArchiver.archivedData(withRootObject: value)
        UserDefaults.standard.set(item, forKey: "selectedChecklist")
        UserDefaults.standard.synchronize()
    }
}
}

在ViewController中使用:-

ClassUserDefaults.shared.selectedChecklist = selectedChecklist

您还想在任何地方设置:-

cell.textLabel?.text = ClassUserDefaults.shared.selectedChecklist[indexPath.row]

希望它会有所帮助:)