iOS, swift3 xcode8 でアプリを作成しています。
例えば、realm のテーブルとして、以下の都道府県コード表をアプリを一番初めに起動する時、もしくはインストール時に作成するにはどうすれば良いでしょうか?
アプリでの利用方法はpickerviewに都道府県名を表示させ、選択した都道府県のコードをrealmに保存することを考えています。
01:北海道
02:青森県
03:岩手県
04:宮城県
....
Realmクラスファイルで「一度だけ実行される関数に定義すれば良い」のが一番楽そうですが
そのような関数を見つけらていません。
あるでしょうか?
次に、コード表のテキストファイルを作成し、
一度だけ、テキストファイルからrealmnに書き込む(インポートする)
この処理はどこのイベントに記述すれば良いでしょうか?
あまり良い方法ではないのかもしれませんが
pickerviewを表示する際に、コード表のテキストファイルを読み込む
ちなみに、Android SQLliteでは、以下のような記述で、所望の処理ができます。これをRealmで実現したい。
簡単に内容を説明すると
sql/以下にCreate文でテーブルを作成したり、Insert文でテーブルに値を挿入するSQL文を記述したファイルを置く。
public class DataBaseOpenHelper extends SQLiteOpenHelper { private static final String DB_NAME = "ScoreBook.db"; private static final int DB_VERSION = 1; private Context m_Context; public DataBaseOpenHelper(Context context ) { super(context, DB_NAME, null, DB_VERSION); // TODO 自動生成されたコンストラクター・スタブ m_Context = context; } @Override public void onCreate(SQLiteDatabase db) { // TODO 自動生成されたメソッド・スタブ try { execSql(db,"sql/create"); } catch (IOException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO 自動生成されたメソッド・スタブ try { execSql(db,"sql/alter"); } catch (IOException e) { e.printStackTrace(); } onCreate(db); } /** * 引数に指定したassetsフォルダ内のsqlを実行します。 * @param db データベース * @param assetsDir assetsフォルダ内のフォルダのパス * @throws IOException */ private void execSql(SQLiteDatabase db,String assetsDir) throws IOException { AssetManager as = m_Context.getResources().getAssets(); try { String files[] = as.list(assetsDir); for (int i = 0; i < files.length; i++) { String str = readFile(as.open(assetsDir + "/" + files[i])); for (String sql: str.split("/")){ db.execSQL(sql); } } } catch (IOException e) { e.printStackTrace(); } } /** * ファイルから文字列を読み込みます。 * @param is * @return ファイルの文字列 * @throws IOException */ private String readFile(InputStream is) throws IOException{ BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(is,"SJIS")); StringBuilder sb = new StringBuilder(); String str; while((str = br.readLine()) != null){ sb.append(str +"\n"); } return sb.toString(); } finally { if (br != null) br.close(); } } }
sql/以下に置くSQLテキストファイルの例
CREATE TABLE prefecture( _id integer PRIMARY KEY, name text ) INSERT INTO prefecture values (1,"北海道"), (2,"青森県"), (3,"岩手県"), (4,"宮城県"),
class prefecture: object{ dynamic private var id dynamic var name : }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/28 13:33