[Realm] モデルを作成してデータを登録する

はじめに

Realmは様々なプラットフォームで使用可能な軽量データベースです。

Realmのインストールについては、過去の記事「CarthageとRealmのインストール」を参照してください。

本記事では、Realm用のモデル作成とデータの登録方法について備忘録として記載します。

環境

Xcode:9.2
Swift:4.0.3
RealmSwift:3.3.2

プロジェクトの作成

新規でSingle View Appのプロジェクトを作成したら、過去記事を参考にSwiftRealmを導入します。

モデルの作成

ここでは、部署と部署に属する社員を管理するモデルを作成します。

部署モデルでは、「部署名」とマネージャーの「氏名」、部に属する「社員」を管理できるようにします。

新規で「Department.swift」というSwift Fileを作成し、Departmentクラスを以下のように作成します。

Realm用のモデルを作成するには、「import RealmSwift」が必要です。また、クラスはObjectを継承する必要があります。

モデルに登録するそれぞれの項目はプロパティとして定義します。このとき「@objc dynamic var」で宣言します。

プロパティで使用できるデータ型にはBool、Int、Int8、Int16、Int32、Int64、Double、Float、String、Date、とDataがあります。

部署名やマネージャーの氏名は文字列を登録しますのでString型にしています。

また、部に属する社員は複数登録できるようにList<epmplyee>としています。

次に、社員を管理するEmplyeeクラスを作成します。このクラスは先ほど作成したDepartment.swiftの中に作成しても構いません。

以上でモデルの作成は完了です。

データを登録してみる

それではデータを登録してみましょう。

はじめに部署のみを登録する方法をみてみます。

はじめにRealmの初期化を行います。

次に、部署を管理するEngineerのオブジェクト(インスタンス)を作成します(4行目)。

あとは、realm.writeメソッドを使用してデータを登録します(6行目以降)。

Realm Browserで確認すると以下のようにデータが登録できていることが確認できます。参考「[Tips] Realmファイルの保存先を知るには?

この時点ではEmployeesは「0」になっているので登録されていないことがわかります。

子データを登録する

今度は、部署に属する社員を登録してみましょう。

社員を登録するには、まず登録先の部署を検索して取得する必要があります。

検索するにはRealmインスタンスのobjectsが持つfilterメソッドを使用します。以下にコード例を示します。ここでは「nameが’システム部’と等しい」を条件にして抽出しています。

つづいて、部に追加する社員を作成します。

あとは、writeメソッドを使用して登録をするだけです。部を検索して社員を登録するまでのコードを以下に示します。

登録が成功すると以下のように社員が登録できていることを確認できます。

子データを削除する

続いて子データを削除してみましょう。

先ほどのfilterメソッドを使用して、システム部を検索し、さらにシステム部に属する「Oscar」を削除する場合は以下のようにします。

削除はrealm.writeメソッドの中で「realm.delete(削除したいオブジェクト)」とします。

親データを削除する

親データも子データ同様にfilterメソッドで特定して削除をします。

Realmファイルを削除するには

Realmによるデータは、Realmファイルに格納されます。何らかの事情でリセットしたい場合は以下のコードを書くことでまっさらにすることができます。

[Tips] Realmファイルの保存先を知るには?

RealmのデータベースファイルはRealm Browserというツールで確認できます。しかし、アプリで作成したデータベースファイルがどこにあるかは非常にわかりにくくなっています。

データベースファイルがどこにあるのかを知るには、Realmの初期化の後にprint文で場所を調べます。

[Tool] Xcodeプラグイン Alcatraz をインストールする

Alcatrazとは

Xcodeに「Alcatraz」をインストールすると、Xcodeから様々なプラグインを導入できるようになります。

環境

Xcode:9.2

Alcatrazのインストール

はじめに、Xcodeを終了しておきましょう。

続いてターミナルを開いて以下のコマンドを実行します。

実際に実行したときのスクリーンショットを以下に載せておきます。

AlcatrazはXcode8以降に対応していないため、以下のコマンドで使用できるようにします。

はじめに、gemを使ってupdate_xcode_pluginsをインストールします。

次にインストールしたupdate_xcode_pluginsを実行します。

このままでは動作しないプラグインがあるため、以下コマンドを実行します。

Xcodeを起動して確認する

最後にXcodeを起動してAlcatrazがインストールされているかを確認します。

Alcatrazインストール直後のみ以下のようにダイアログが表示されるので[Load Bundle]をクリックします。

メニューのWindowsに「Package Manager」があれば成功です。

 

 

 

[UI部品] Container View

Container Viewとは

Container Viewを使用すると、View Controllerの中に別のViewを組み込むことができます。

複雑な画面を作成する場合は、View Controllerを複数のContainer Viewを配置すると管理が容易な場合がありますので必要に応じて使用すると良いかと思います。

環境

Xcode:9.2
Swift:4.0.3

Container Viewを使ってみよう

はじめにSingle View Applicationのプロジェクトを作成して、Container Viewを貼り付けます。配置したら、サイズを任意の大きさに変更してください。

Container Viewを貼り付けると、貼り付けたContainer Viewと同じ大きさのView Controllerが追加されます。貼り付けたContainer Viewのサイズを変更すると、追従して大きさが変わります。

あとは、追加されたView Controllerを適当にデザインします。ここでは背景色をオレンジにして、Labelを1つ貼り付けてみましょう。

View ControllerからContainer Viewを操作する

はじめに、先ほど配置したContainer View専用のViewControllerクラスを作成しましょう。

メニューの[File]-[New]-[File]を選択して、一覧から「Cocoa Touch Class」を選択します。

次に任意のクラス名を入力して(この例ではContainerViewController)、継承元のクラスをUIViewControllerにします。

最後に保存先を選択して、ファイルを作成します。

続いて、作成したクラスをContainer Viewに割り当てます。Main.storyboardを開いてContainer Viewを選択したら、Class欄に先ほど作成したクラス名を入力します。

続いて、ViewCotrollerからContainer Viewに貼り付けたLabelに文字を表示できるようにしてみます。

はじめにLabelのアウトレット接続を作成します。ContainerViewControllerクラスにlblContainerMsgという名前でアウトレット接続を作成します。

続いて、showMsgという名前のメソッドを実装します。このメソッドは親のView Controllerから呼び出して、Container Viewに貼り付けたLabelにメッセージを表示するためのものです。

次に、親のページにText FieldとButtonを貼り付けます。Text FiledにはtextMsgという名前でアウトレット接続を作成し、ButtonにはshowButton_Tappedという名前のアクション接続を作成します。

最後にshowButton_Tappedメソッドの中身を実装します。Container ViewはchildViewControllersで取得することができます。現時点ではContainer Viewを1つしか配置していないので、childViewControllers[0]で特定することができます。Container Viewを取得できたら(ここでは変数childVCに取得しています)、先ほど実装したshowMsgメソッドを呼び出すことができます。

以下のように実装すると、textFieldに入力した文字を、Container ViewのLabelに表示することができます。

Container Viewから親のView Controllerを操作する

今度はContainer Viewから親のView Controllerを操作してみましょう。

はじめに親のView ControllerにLabelを1つ貼り付けてアウトレット接続を作成します。ここではlabelMsgという名前で作成します。また、Container Viewから親のView Controlerを操作するためのshowMsgメソッドを実装します。このshowMsgが呼ばれるとContainer Viewからのメッセージを表示します。

showMsgのコードを以下に示します。

次に、Container ViewにButtonを1つ貼り付けて、showButton_Tappedというアクション接続を作成します。

showMsg_Tappedのコードを以下に示します。

実行してView Controllerの[表示]ボタンをタップすると以下のようにView Controllerに「テスト」と表示されます。

[UI部品] Table Viewの基礎

今回からTable Viewの使用方法についてみていきます。

Xcode:9.2
Swift:4.0.3

Table Viewを使用すると、データをリスト形式で表示することができます。例えば、リマインダーアプリではTable Viewが使用されていることがわかります。

1.TableViewを配置する

はじめにSingle View Applicationのプロジェクトを作成して、Table Viewを貼り付けます。配置したら、サイズを任意の大きさに変更してください。

2.Table View Cellを配置する

Table Viewに項目を表示する為にはセルが必要です。先ほど配置したTable Viewの上にTable View Cellを1つ配置します。もしくは左側のView Controller SceneのTable Viewの下にTable View Cellをドラッグして配置してもOKです。

3.dataSourceとdelegateの設定

Table Viewのにデータを表示したり操作する為にはdataSourceとdelegateの設定が必要です。

View Controller Sceneの下にあるTable Viewを[control]キーを押しながらドラッグして、View Controllerの上で離します。

すると、メニューが表示されるのでdataSourceを選択します。同様にしてdelegateも選択します。

3.Table View CellをViewController.swiftから操作するための設定

今度はTable View CellをViewController.swiftから操作できるようにします。

はじめにView Controller SceneにあるTable View Cellを選択します。続いて、Show the Attributes inspectorを選択し、最後にIdentifierに「myCell」よ入力します。ここに入力する名前は「myCell」でなくても構いません。

4.ViewController.swiftへの実装

デザインは以上で完了ですので、ViewController.swiftへのコードの実装をしていきます。

はじめに、セルに表示するデータを準備します。ここでは、ライオン、シマウマ、キリンの3つの文字列を表示するようにするため、override func viewDidLoad()の上あたりに、以下のコードを挿入してください。

次に、ViewControllerクラスにdataSourceとdelegateを実装します。以下のようにUIViewControllerの右側に、UITableViewDelegateとUITableViewDataSourceを記述します。

すると、エラーが表示されるので[Fix]を押して解決させます。

[Fix]を押すと、以下のように2つのメソッドが実装されます。この2つは必須のメソッドなので、「実装されていないよ」という意味でエラーが表示されていたわけです。

上のメソッドはTable Viewに何個のセルを表示するかを指定するためのものです。animalsのデータ全てが表示できるようにする為に、以下のように編集します。

もう1つのメソッドは、セルに表示する値を設定するためのものです。

以上で実装は完了です。実行をしてみると、以下のようにanimalsに設定したデータが一覧となって表示されます。

最後にViewController.swiftの全ソースを以下に示します。

コードはGithubに置いておきます

https://github.com/HIRO-NET/Swift4-Sample/tree/master/TableViewSample1

[Navigation Controller] NavigationControllerを使用する

今回はNavigation Controllerを使用する方法をみていきます。

Xcode:9.2
Swift:4.0.3

本記事のサンプルは以下に置いておきます。

https://github.com/HIRO-NET/Swift-UI/tree/master/NavigationControllerSample

Navigation Controllerは、画面の上部にナビゲーションを表示して、複数のページを行ったり来たりできるようにします。

例えば、カレンダーアプリを見ると(下図)、画面の上部には「<2018」や検索ボタン、追加ボタンなどがあります。Navigation Controllerを使用するとこのようなナビゲーション付きのアプリを作成することができます。

 

 

Navigation Controllerの例

Navigation Controllerの配置

はじめにSingle Viewのプロジェクトを作ります。

次に、Main.storyboardを開き、View Controllerをクリックして選択しておきます。 

続いて Xcodeのメニューから[Editor]-[Embed In]-[Navigation Controller]を選択します。すると、Main.storyboardにはNavigation Controllerの画面が追加され、既存のView Controllerへと接続されます。追加されたNavigation Controllerの画面は、アプリ起動時に表示されることはありません。あくまでも表示されるのは、既存のView Controllerになります。

次に、もう1つView Controllerを追加して、既存のView Controllerとの行き来をできるようにします。

新しくView Controllerを追加したら、既存のView Controllerにボタンを一つ追加してみます。ここでは、Navigation Controllerの右上に追加をしてみましょう。

Navigation ControllerにはBar Button Itemというボタンを配置します。

続いて、配置したBar Button Itemをアイコンに変更してみましょう。Bar Button Item を選択して、System Itemを「Add」にします。すると、Bar Button Itemが「+」アイコンに変更されます。この他にも使用可能なアイコンがありますので試してみてください。

次に、「+」がタップされた時に、新しく追加されたView Controllerに遷移するように設定をします。「+」ボタンの上を[Control]キーを押しながら、遷移先のViewまでドラッグして離します。するとメニューが表示されるので「Show」を選択します。

新しく追加したView Controllerの上部には、Navigation Barが表示され、既存のView ControllerとSegueで接続されます。

以上でNavigation Controllerの設定は完了です。もう1つView Controllerを追加する場合も同様の手順で作業をします。

あとは実行をして動作を確認してみてください。複数画面で行き来ができるはずです。

 

CarthageとRealmのインストール

Swiftで軽量データベースRealmを使用するにはCarhage(カーセージ)のインストールが必要です。

そこで、Carthageをインストールしてみたので覚書として手順を残しておきます。

1.Carthageのインストール

はじめに https://github.com/Carthage/Carthage/releases にアクセスします。

Charthageのpkgファイルがあるので、ダウンロードして実行します。

2.Cartfileの作成

目的のライブラリをインストールするには、はじめにCartfileと呼ばれるファイルを作成する必要があります。

terminal.appを開いて、プロジェクトフォルダへ移動し以下のコマンドを実行します。

すると、以下のようにCartfileが作成されます。

Realmのインストール

次に作成したCartfileを編集して、Realmをインストールする準備をします。

Cartfileは以下のように編集します。

続いて、terminal.appでプロジェクトのディレクトリに移動し、以下のコマンドを実行します。

成功すると、プロジェクトフォルダ配下に以下のファイルが作成されます。

  • Cartfile.resolved
  • Cartage/Build

プロジェクの設定

続いてプロジェクトを開いてRealmを使用できるように設定をしていきます。

はじめに、プロジェクトナビゲータでプロジェクトを選択したら、「Build Phases」を選択して、左側にある[+]ボタンをクリックします。メニューが表示されるので

Run Scriptの欄に以下を追加します。

Input Filesに以下を追加します。

次に「General」タブを選択して、「Linked Frameworks Libraries」の中にある[+]ボタンをクリックします。

ライブラリの選択画面になるので、[Add Others]ボタンをクリックして以下の2つのファイルを追加します。

  • Carthage/Build/(対象デバイス)/RealmSwift.framework
  • Carthage/Build/(対象デバイス)/Realm.framework

 

以上でライブラリの追加が完了です。

あとは、Realmを使用したいファイル内で以下を記述して使用します。

FSCalendarを使用する(2) Tips

前回の記事「FSCalendarを使用する(1) storyboardへの貼り付けと使用準備」で、FSCalendarを利用する準備が整いました。

今回から実際の使用方法について見ていきます。

選択された日付を取得するには?

FSCalendarで選択された日を確認するために、はじめにLabelを1つ配置しておいてください。なお、配置したLabelはアウトレット接続をlabelDateという名前で作成しておいてください。

FSCalendarで日付がタップされた時の処理は以下の関数を使用します。

選択された日付はdate変数に格納されます。このdateをCalendarクラスを使用して年、月、日で分解してからLabelに表示する例を以下に示します。

2018年2月14日を選択した例を以下に示します。

コードから日付を選択するには?

コードから任意の日付を選択するには、はじめにFSCalendarのアウトレットを準備しておきます。ここではアウトレット名をmyCalendarとしています。

Calendarクラスを使用して選択したい日を作成し、FSCalendarが持つselect関数の引数に渡します。これで指定した日を選択することができます。以下は2018年6月19日を選択する例です。

実行すると以下のように2018年6月19日が選択されます。

スクロール方向を変更する

スクロール方向を変更するには、scrollDirectionプロパティを使用します。既定値はhorizontal(水平方向)がセットされています。

スクロールを禁止する

スクロールを禁止するには、scrollEnabledプロパティにfalseをセットします。既定はtrueなのでスクロールが可能になっています。

週表示にする

既定では1ヶ月分のカレンダーが表示されますが、1週間分だけ表示することが可能です。

scopeプロパティにweekをセットすると週表示になり、monthをセットすると月表示(既定値)になります。

 

FSCalendarを使用する(1) storyboardへの貼り付けと使用準備

今回は、FSCalenderを使用する方法を見ていきます。

FSCalenderの導入方法については前回の記事「CocoaPodsを使用してFSCalendarを導入する」を参照してください。

Single Viewアプリケーションのプロジェクトを作成して確認していきます。

FSCalendarの配置

はじめにMain.storyboardを表示して、UIViewを貼り付けます。

続いて、貼り付けたUIViewのClassを「FSCalendar」にします。

すると、先ほど貼り付けたUIVewにカレンダーが表示されるようになります。

続いてView ControllerにdataSourceとdelegateを設定します。

FSCalendar上で[control]キーを押しながら、View Controllerまでドラッグします。

ドラッグすると以下のようにOutlets作成用のウィンドウが表示されるので、dataSourceとdelegateを作成します(1回につき1つしか作成できないのでdataSourceとdelgate分の2回実行する必要があります)。

 

この時点で一旦ビルドをしておきましょう。

エラーが出ないことを確認するとともに、FSCalendarをインポートできるようになります。

続いてViewController.swiftを開き、コードを以下のように編集します。

FSCalendarをインポートし、FSCalendarDataSourceとFSCalendarDelegateを継承しています。

実行すると、以下のようにカレンダーが使用可能になります(カレンダーのサイズは任意で変更をしてください)。

 

CocoaPodsを使用してFSCalendarを導入する

iOSにはCalendarコントロールが提供されていないのですが、MITライセンスのFSCalendar(https://github.com/WenchaoD/FSCalendar/blob/master/README.md)というコントロールがあります。

今回は、CocoaPodsを使用して、このFSCalendarコントロールをプロジェクトに組み込む方法を見ていきます。

※CocoaPodsのインストール方法は「CocoaPodsの導入」を参照してください。

はじめに、新規でプロジェクトを作成しておきます。

次に、ターミナルを起動して、作成したプロジェクトディレクトリに移動して以下のコマンドを実行します。

成功するとプロジェクトディレクトリにPodfileが作成されます。

作成されたPodfileを開いて以下のように編集します。

Podfileの編集が完了したら、ターミナルに戻りPodfileがあるディレクトリ上で、以下のコマンドを実行してインストールをします。これによりプロジェクトにFSCalendarが取り込まれます。

ライブラリインストール完了移行は、以下のように「プロジェクト名.xcworkspace」をダブルクリックしてプロジェクトを開きます。

XcodeのProject Navigatorを確認するとFSCalendarが導入されていることを確認できます。