2016-12-09 11 views
0

編集:私はUserDefaultsで間違っていることを誰かが理解している場合、私はする必要があります。これは私を狂ってしまう。UserDefaultsを使用して、削除されたアイテムがテーブルビューで削除されないようにすることに混乱しています

私が(セルが前のテーブルビューにタップされた依存れている)のviewDidLoadでsetPageで()関数

func setPage() { 
    let pageTitle = self.navigationItem.title 
    let userDefaults = UserDefaults.standard 


    let productData = userDefaults.object(forKey: "products") as? [String] 
    let productImageData = userDefaults.object(forKey: "productImages") as? [String] 

    ProductController.products = productData! 
    ProductController.productImages = productImageData! 

    switch pageTitle! { 
    case "Apple": 
     ProductController.products = appleProducts 
     ProductController.productImages = appleImages 
    case "Google": 
     ProductController.products = googleProducts 
     ProductController.productImages = googleImages 
    case "Twitter": 
     ProductController.products = twitterProducts 
     ProductController.productImages = twitterImages 
    case "Tesla": 
     ProductController.products = teslaProducts 
     ProductController.productImages = teslaImages 
    default: 
     ProductController.products = samsungProducts 
     ProductController.productImages = samsungImages 
    } 

    tableView.reloadData() 
} 

とテーブルビューを移入し、cellForRowAt indexPathでい

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ProductCell 

    cell.textLabel?.text = ProductController.products[indexPath.row] 
    DispatchQueue.main.async { 
     cell.productLogoView.image = UIImage(named: ProductController.productImages[indexPath.row])! 
    } 
    return cell 
} 

そして、ここはどこです私は細胞の削除を処理します

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 
    { 
     tableView.beginUpdates() 
     ProductController.products.remove(at: indexPath.row) 
     ProductController.productImages.remove(at: indexPath.row) 
     tableView.deleteRows(at: [indexPath], with: .fade) 

     let userDefaults = UserDefaults.standard 
     userDefaults.set(ProductController.products, forKey: "products") 
     userDefaults.set(ProductController.productImages, forKey: "productImages") 

     tableView.endUpdates() 
    } 
} 

私はページから移動する場合次に元に戻り、削除されたセルが再びそこにあります。私はviewDidLoadのtableViewに値を設定し、UserDefaultsを使用してこれを解決する方法があると思うが、これを実装する方法はわかりません。私はドキュメントを読んで解決策を探しましたが、この特定のユースケースで私を助けるものは何も見つかりません。

削除したセルを再起動するまで削除されたセルを削除しないようにするにはどうすればよいですか?

配列の初期化 - 私はproductとproductImagesの空の配列を持っているので、setPage()はタイトルをチェックし、空の配列に対応する会社の製品と製品イメージを入力します。

static var products = [String]() 
    var appleProducts = ["iPad", "iPod", "iPhone"] 
    var googleProducts = ["Search", "Firebase", "Pixel"] 
    var twitterProducts = ["Twitter", "Periscope", "Vine"] 
    var teslaProducts = ["Tesla Model S", "Tesla Model X", "Tesla Powerwall"] 
    var samsungProducts = ["Samsung Galaxy", "Samsung Note", "Samsung Tab"] 

    static var productImages = [String]() 
    var appleImages = ["iPad", "iPod", "iPhone"] 
    var googleImages = ["GoogleLogo", "Firebase", "Pixel"] 
    var twitterImages = ["TwitterLogo", "Periscope", "Vine"] 
    var teslaImages = ["TeslaS", "TeslaX", "TeslaPowerwall"] 
    var samsungImages = ["SamsungGalaxy", "SamsungNote", "SamsungTab"] 
+0

商品や画像に固有の識別子はありますか? – random

+0

あなたは何を意味するのかわかりません – d0xi45

+0

UserDefaultsコードを試しましたか?それに問題がある場合、何が起こっているのかを投稿してください。 – Connor

答えて

1

UserDefaultsは、キーと値のペアです。あなたがあなたの製品を初期化しているところはどこでも、その後

// get the current product - this depends on how your table is set up 
let product = products[indexPath.row] 
// set the boolean to true for this product 
UserDefaults.set(true, forKey: product) 

追加:だから、あなたは、各製品のブール値を(「隠し」)を割り当てることができ

// only include elements that should not be hidden 
products = products.filter({ UserDefaults.boolForKey($0) == false }) 

あなたはまた、すべてを格納することができ

+0

Connorありがとう、もっとあなたのポストにいたのですか?私はあなたのコードを私のsetPage()関数に追加しようとしたが、うまくいきませんでした。これらのコードがどこにあるのかを具体的に記述できますか? – d0xi45