質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1341閲覧

ios開発:UIImageの永続化するときの実装方法の選択

massanmesu

総合スコア36

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/04/28 07:23

開発未経験の初心者です。
UIkitで自作アプリを作成しています。

UIImageデータをプロパティとして持つカスタムクラスを永続化したい場合、UIImageデータをData型に変換してUserDefaultsに登録する方法とRealmなどのデータベースに保存する方法のどちらが良いでしょうか。

作っているアプリは、料理の写真を撮影し、料理名や値段を記入、それらのデータを持つカスタムクラスをインスタンス化し、配列にしてTableViewに一覧表示するというアプリです。追加ボタンで料理を追加するため、データ量も相対的に増えていくことを想定しています。

UserDefaultsはユーザーの登録内容などの少数のデータを保存するのに向いているため、今回のケースではRealmなのかなぁ。と思っております。
が、ネットで「UIImage 永続化」などで検索をかけると、Data変換しUserDefaultsに登録する旨の記事が多く見受けられるため、判断に困っております。

判断基準がわかる方がいましたらご教授いただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomato879241

2021/04/28 07:45

「UIImageデータをプロパティとして持つカスタムクラスを永続化したい場合」と言うのであれば、ただそのクラスをそのままファイルとして保存し、必要な時にそのデータをファイルから読めばいいのでないでしょうか?その場合は自分で「NSKeyedArchiver」と「NSKeyedUnarchiver」の使い方を自分で勉強してください。
massanmesu

2021/04/28 23:48

わかりました。調べてみます。 ありがとうございました。
guest

回答1

0

ベストアンサー

要件によりますが、回答を試みます。
まず前提として、今回のように、多くのレコードを要するようなデータに関しては、
UserDefaultsよりは、
CoreDataなどのアプリ内データベースないし、Webサーバーとの連携が望ましいかと。
その上で、下記二点の方法と、メリット・デメリットをもって回答とさせていただきます。

CoreDataなどのアプリ内データベースにData型として保持する

これが最も実装が簡単かつ、直接的であります。
それがそのままメリットとなるでしょう。
しかし、
とかく容量を食うのが最大の弱点です。
たとえ、Data型にしたとしても、ほとんど画像データと同じデータ量となります。
となると、アプリ容量(アプリが保持するデータ量)が肥大化し、デバイスの容量を逼迫することにもなりかねません。
(単純に端末内の画像をコピーすることと同じため)

CoreDataなどのアプリ内データベースに、端末内の画像のパスを記録する

これはかなりコツがいる実装となります。
(パスに対する、扱いと画像をSwiftにて扱うことにかなり調査し精通しないと難しい)
それがそのままデメリットとなり、もう一つのデメリットは、
元の画像が消された時の処理が必要になることです。
(画像がない場合、画像は消されています、表示をする、など)

メリットとしては、二点ほどあります。

  • とかく、容量の肥大化は最大限防げる
  • 写真を加工などした場合でも、編集情報さえ保持すれば、元画像を何度も編集し直すような実装も可能になる

もっと他にもあるかもしれませんが、
基本はこんな感じかと。
質問者さんが、どの方法がいいか、は要件などと照らし合わせ、決定されるとよいかと思います。

以上、参考になれば幸いです。

投稿2021/04/28 07:38

miyabi_takatsuk

総合スコア9555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

massanmesu

2021/04/28 23:47

ご教授いただきありがとうございます。 開発未経験のため、簡単に実装できる一つ目の方法を採用します。 おそらくほとんと使われないアプリだと思うので、重くなることはない、という判断で進めます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問