我想知道在关闭应用程序后如何使待办事项列表相同。在我的代码中,我首先声明了一个数组,我想知道在用户重新启动应用程序后如何为用户保存更新的数组。我在网上搜索了一些答案,但只发现了有关在情节提要中创建实体的旧想法。而且我很确定,到目前为止,必须有比手动添加更精美的东西。
如何在更新数组时保存该数组,以使它在应用重启后不会丢失?
我的代码:
$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);
答案 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]
希望它会有所帮助:)