8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UserDefaultsで画像をローカルに保存する

Posted at

#はじめに
投稿用の画像を下書きとしてUserDefaultsに保存した時のメモです。
###主に使う変数

ViewController.swift
   let defaults = UserDefaults.standard
   var saveArray: Array! = [NSData]()
   var image: UIImage!

#ViewControllerでの記述
まずはimageをNSData型にキャストして配列としてUserDefaultsに保存する。

ViewController.swift
 func sendSaveImage() {
        //NSData型にキャスト
        let data = image.pngData() as NSData?
        if let imageData = data {
            saveArray.append(imageData)
            
            defaults.set(saveArray, forKey: "saveImage")
            defaults.synchronize()
        }
    }

保存したデータを取得する。

ViewController.swift
func defaultsArray() {
        //UserDefaultsの中身が空でないことを確認
        if defaults.object(forKey: "saveImage") != nil {
            let objects = defaults.object(forKey: "saveImage") as? NSArray
            //配列としてUserDefaultsに保存した時の値と処理後の値が変わってしまうのでremoveAll()
            saveArray.removeAll()
            for data in objects! {
                saveArray.append(data as! NSData)
            }
        }
        tableView.reloadData()
    }

配列からtableViewに反映する。

ViewController.swift
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
        
        //data型にキャストしてUIImageとして取り出す
        cell.cellImageView.image = UIImage(data: saveArray[indexPath.row] as Data)
        cell.cellImageView.frame = CGRect(x: 0, y: 1, width: cell.bounds.size.height - 2, height: cell.bounds.size.height - 2)
        cell.cellImageView.contentMode = .scaleAspectFill
        cell.cellImageView.clipsToBounds = true
        
        return cell
    }

#結果
実行後の結果はこんな感じです。

IMG_8497.jpg

#最後に
cellを削除するときはとりあえずこんな感じで行なっています。

ViewController.swift
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let deleteButton: UITableViewRowAction = UITableViewRowAction(style: .normal, title: "削除", handler: {(action, index) -> Void in
            //指定したcellを削除した状態でUserDefaultsをリセットして保存し直す
            saveArray.remove(at: indexPath.row)
            defaults.removeObject(forKey: "saveImage")
            defaults.set(saveArray, forKey: "saveImage")
            defaults.synchronize()
            tableView.deleteRows(at: [indexPath], with: .fade)
        })
        deleteButton.backgroundColor = .red
        
        return [deleteButton]
        
    }

終わり。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?