日々の学習
1/28
今日はメモアプリ作成中にCould not find a storyboard named 'name' in bundleというエラーが発生した。nameというstoryboardファイルがないとのことでメンターの言う通りMainにするところをnameと間違えており、そこをMainに直すことで解決できた。タイプミスが多いので気をつけたいと思う!
それからライブラリのrealmを追加するために色々とインストールをした。
最初にHomebrewというツールでcocoapodsをインストールしたいのでHomebrewをインストールし、その後にbrew install cocoapodsでインストールしようとしたがここでbrewコマンドが有効になっておらずターミナルの助言の2コマンドを実行した後にcocoapodsをインストールできた!その後にpodfileにRealmをインストールするコードを書き無事にインストールできた!
1/29
Chapter8
step12-17
※realmの構文は公式ドキュメントで見れる
Chapter12ではターミナルを使いRealm(レルム)というライブラリをインストールした。
Chapter13ではRealmを使ってモデルを定義した。structからclassに変えることでコンパイルエラーが起きたり不具合が生じるので初期値を設定してあげることで対処する。データを一意に識別するための識別子@objc dynamic var id: String = UUID().uuidStringを追加することを推奨されている。
Chapter14ではrealmを使ってデータを保存した。MemoDetailViewControllerのclassにvar memoData = MemoDataModel()というプロパティを追加し使用できるようにした。それからfunc saveDataに保存処理を追加した。テキストビューを変更する度に上書きされるようにUITextViewDelegate というプロトコルを使用してその中でtextViewDidChangeというメソッドを使用する。UITextViewDelegateプロトコルを準拠させた際にtextView.delegate = selfを忘れないようにする。それからコンパイルエラーなどが発生し引数を渡すなどして対処した。
Chapter15では保存したデータを表示させた。HomeViewControllerのclass内のfunc setMemoDataの中を変更して表示させれるようにした。しかしライフルメソッド(画面の表示や非表示に関するメソッド)によって定義する場所によって反映のタイミングがずれてしまう現象がある。そのためviewWillAppearメソッドを書きその中に入れることで良いタイミングで反映される。
Chapter16ではメモを削除できるようにする。横にスワップして削除できるようにした。Deleteメソッドに削除したいオブジェクトを引数に入れてあげることで削除ができた。それだけだとmemo DataListとcellにはデータが残ってしまっているのでそれらも削除するようにした。
Chapter17ではテーマカラーを設定するためのボタンを追加した。icooon monoでアイコンをダウンロードし、それをassetに読み込みアイコンとして使えるようにした。それから3つのカラーボタンとキャンセルボタン、アラートなどを作成した。
1/30
Chapter8
step18-20
Step18ではテーマカラーを定義した。まずはenumを使い、いくつかのテーマカラーを追加した後にUIColorクラスで#ffffffなどのカラーコードをrgba(red,green,blue,alpha)に変換するコードを書いた。ネットにカラーコードをrgbaに変換してくれるサイトなどもある。その後はswitchを使いそれぞれの色ごとにUIColorを定義していった。
Step19ではテーマカラーを表示し、デフォルトとそれ以外でテーマカラーボタンとタイトルテキストの色を変更するようにした。didTapColorSettingButton内にMyColorTypeで定義した色を追加して、iOS13以降ではUINavigationBarの背景色を変更する際にUINavigationBarAppearanceというUIクラスを使用する様になったためUINavigationBarAppearanceを使用してナビゲーションの色を変えれるようにした。
Step20ではテーマカラー設定を保存した。今回のようなテーマカラーを保存するだけの単純なものはrealmのようなライブラリではなくUserDefaultsという機能を使って保存できるようにした。UserDefaultsで保存する際はInt型にする必要があったのでMyColorTypeのenumをInt型にした。UserDefaults機能のstandardプロパティ内のsetValueメソッドを使った。その中の引数にデータを渡すrawValueとデータにアクセスするためのキーにthemeColorTypeKeyの文字列を入れた。
1/31
Autolayout2, Autolayout3
Chapter9
step1-3
step1では完成図を確認した。
step2ではプロジェクト作成とタブバーの作成を行った。UITabBarControllerを使い、2つのタブで分岐して背景色を変更してわかりやすくした。それから2つのファイルを作り接続した。
step3ではカレンダータブを作成した。カレンダータブを作成する際はライブラリのFSCcalendarを使用して作成していった。それからヘッダーの日付フォーマットや曜日、曜日の色を変更した。ビルドの際にエラー( Failed to render and update auto layout status)が発生したが、clean build folderで解決できた。
2/1
Chapter9
step4-6
step4では体重入力画面作成を行った。Main.storyboardにボタンを作成し、それをCalendarViewControllerに接続してボタンを押すとEditorViewController.storyboardの画面に遷移するようにした。storybooardがないというエラーが発生したが前に対処したことがあったのですぐに解決できた。
step5では体重データモデル作成を行った。ライブラリのRealmSwiftを使い体重のデータを作成し、体重の欄をタップするとキーボードが出てきてDoneボタンを押すとキーボードがしまわれる仕組みにした。
step6では日付データの入力作成をした。datePickerを使い日付データのキーボードを日本語、ホイールの形、タイムゾーンを設定し実装した。その後に日付と体重のキーボードを閉じるのをUIToolBarを使い作成した。それからdidChangeDateをしたら実際に変更した日付が日付の欄に表示できるようにした。
2/2
Chapter9
step7-9
step7ではデータの保存ができるようにした。最初に保存ボタンを作りボタンの角を丸くした。saveRecord内でif文を使って日付と体重が描かれいることや更新されていることを確認してそれらをrealm.add(record)で保存するように作成した。最後にログに保存されたかを表示されるようにした。
※ログに表示しすぐわかるように絵文字などを活用すると良い→👀
step8では体重データをカレンダーに連動させた。最初にカレンダーに全てにマークが付くように設定し、最終的に体重データがある日付だけにマークをつくようにした。今回はextensionを使ってファイルを分けることでコードをスッキリとした感じで書けた。
step9では日付選択時にデータ記録画面を開くようにした。まず日付を選択した際にデータ入力画面へ遷移するようFSCalendarのdelegateプロトコルを使いタップされた時の処理を書いた。カレンダーにデータがある所をタップするとデータ記録画面に遷移し、データの確認でログに表示されるような処理も書いた。最後にcalendar.deselect(date)を記載して他の日付をタップしても反応しないようにした。
2/3
Chapter9
step10-11
step10ではデータ編集処理を行った。最初は日付に保存されているデータを反映させる処理を書いた。そのあとは更新したはずのデータがすぐに反映されないので更新したと同時に反映されるようにDelegateを使って処理を書いていった。少しだけだがDelegateの使い方に理解が深まった。
step11ではデータ削除を実装していく。最初に削除ボタンを作り、それをEditorViewControllerに繋げ削除メソッドを実行するようにした。それからdeleteRecordメソッド内に処理を書いていった。NSPredicateを使用した条件検索を行う場合はfilterメソッドを使い処理を書いていく。最後にデータを削除した際にはCalendarViewControllerのカレンダーも更新したいのでdelegate?.recordUpdate()で更新する。それから削除処理が完了した際にはdismissメソッドを使いデータ入力画面を閉じるようにした。
2/5
Chapter9
step12-14
step12ではグラフ画面作成を行った。今回はグラフを表示させるためにcocoapodsでChartsをインストールした。このChartsを使うことで様々なグラフを表示することができる。それからMainstoryboardの一つをGraphViewControllerに接続し、表示するための処理を書いて最後にそれらをViewWillAppear内に書き込んで表示されるたびに更新されるようにした。iOS deployment targetあたりでエラーが起きビルドがFailedしてしまったが海外の記事を見てtargetの数値を全て合わすことによりビルドできた。
step13ではグラフの見た目を調整した。最初にグラフの下部をx軸になるように設定していった。その次にx軸は数字になっていて何の数字かわからないのでそれらを変える処理を書いていく。GraphDateTitleFormatterファイルを作成しAxisValueFormatterを継承し文字列に変換する処理を書いていった。最後の文字列の適用できるようにGraphViewController内のfunc configureGraphに処理を書いて無事に適用させた。
step14ではグラフの期間を表示していくようにした。最初にUILabelとUITextFieldを使って期間のラベルと日付の表示部分のフィールドをMainstoryboardに追加した。作成した2つのTextFieldをGraphViewControllerに接続し、TextField内にDatePickerを表示させたいためEditorViewControllerで書いたDatePickerをコピーしGraphViewControllerに貼り付け適用させた。その後に2つのフィールドにDatePickerを適用させる処理を書いていき、2つのフィールド内の日付が同じにならないようにするための処理も書いた。最後にviewWillAppearにconfigureTextFieldを忘れずに書き込みビルドすることでグラフの上に期間を表示させることができた。
2/6
Chapter9
step15-18
step15ではグラフの表示期間を変更した。最初に表示期間のテキストフィールドを閉じるボタンを前に書いたUIToolBarを使って実装した。その次にdidChangeStartDateとdidChangeEndDateメソッドを使い、テキストフィールド内の表示期間を反映するようにした。最後にrealmのデータを取得の際にsetRecord内に開始日と終了日のデータを取得するように書き換えれば選択した期間をグラフに反映できる。
※if文は複数のlet構文を使用することができる。
※realmのデータを指定して取得する場合は.filterで検索条件を指定できる。
step16ではUITabBarControllerのアイコンを変更した。icoon.monoでカレンダー用とグラフ用のアイコンをダウンロードし2つのサイズの画像を作成しAssetsにImageSetを作りそこにドラッグして追加した。その後にTabBarItemでImageを先ほど作成したImageSetを選択すればTabをアイコンに変更することができる。
step17ではアプリのアイコンを作成した。icoon.monoでアイコンをダウンロードし、googleslideを使いアイコン画像を作成した。その後にそのアイコンを正方形に切り取り、複数の画像サイズを抽出するwebサイトを使いいくつかの画像をダウンロードした。それらをAssetsのAppIconにドラッグしビルドを行うと無事にアイコン設定を完了できた。
step18ではフォルダ階層整理を行った。アーキテクチャのMVC(Model, View, Controller)の3つをメインにフォルダを作成し整理した。それ以外の残ったDelegateなどの特殊なファイルも専用に作成しそこにファイルを置き整理することでスッキリとさせた。
2/8
今日はTableViewCellを設置してそこにUIButtonとUILabelを乗せて、それらを表示してボタンをアクションするように実装した。しかしそれらをTableViewの上でやるのはあまりしないらしいので今後カスタムセルという感じでやっていく(セル用にファイルを作成し行う)
2/9
Git関連
今日はGitの概念説明や開発現場での必要性学んだ。GitはVSC(バージョンコントロールシステム)と言って「ソースコードのバージョン管理ツール」 のこと。それからGitがある場合とない場合どのような違いがあるかを知った。
その次にGitのリポジトリ(Gitの中のフォルダのようなもの)を作成し、Gitで使用するアカウントの初期設定を行なっていった。次にGitの状態概念や変更の保存を行なった。Gitの状態は3パターンあり、未保存状態(Working Directory)と仮保存状態(Stagin Area)と保存済状態(.git directory)のようなもの。新しくGit内でファイルを作成しこれらの3パターンを通しリポジトリに保存していった。いくつかのコマンドも覚えなければならないと感じたのでまた別の日に見返すなどしたいと思う。
Chapter2-3
復習のため動画教材を見返した。
ToDoApp
今日はメンタリング時に聞いたカスタムセルを実際に実装してみた。思った以上にスムーズにいきカスタムセルのファイルを別個で作り、stroyboardも別で作るのでファイル内がスッキリしていてわかりやすかった。実装した際にセルの高さが狭かったのでheightForRowAtを使い高さを調整できた。
現在はカスタムセルのボタンを押すとアラート表示するように実装を試みている。delegateを使用し、あるクラスから別のクラスに処理を任せるようにしているが思った挙動にならずエラーも出ていないため調べている途中です。
カスタムセル実装の際の参考記事
2/12
Git 過去のコミットを改変する
開発をしているとコミットした内容に誤りがあり、それを改変しなければならないケースがあるのでそう言った際に過去のコミットに戻り改変する。最初にgit commit --amendを使い直前のコミット内容を変更した。その次に大幅に改変したい時は(git reset --hard コミットのハッシュ番号)で指定先のコミットに戻り内容を変更した。実際の開発現場でよく使われると書いてあったので忘れないようにしたいです。
2/13
Git エイリアス設定を行なってみよう
Github 概念説明とgitとの違い
todo用モデルの作成
Chapter8の見返し
・エイリアスとはコマンドを省略する設定を行うこと(st = status)など。エイリアスを設定する方法は2パターンありコマンドで設定する場合とファイルを開き直接そこに打ち込むという種類がある。最後によく使うエイリアスをファイルに書き込んで保存した。
・Gitはソースコードのバージョンを管理するためでGithubはクラウドを使ってWeb上でソースコードとGitを共有するためのもの。
・memoappを参考にtodo用モデルを作成しカスタムセルの中のラベルにテキストを表示することを行なった。ビルドした際にラベルの文字とテキストの文字が重なってしまったが、[cell.label←.text = todoDataModel.text]と矢印の部分をラベルに変更しtodoDataModelのテキストをセットすることで正常に表示することができた。その後にdidSelectRowAtを使い選択したセルのインデック番号を渡すようにした。
・resignFirstResponderを使いアラートのキーボードを表示した際にretrunや改行のボタンを押すとキーボードが終われるようにした。
2/15
Github アカウント作成と初期設定
まずGithubのアカウント作成を作成し、その後にSampleAppというRepositoryを作成した。その次に特定のデータ通信を行う送信者と受信者の間で共通する鍵(秘密鍵と公開鍵)を保有し、更にデータ通信内容を暗号化することによって、意図せず第三者にデータが漏れた場合でも中身の解読ができないようにすることで、セキュリティリスクを軽減するための秘密鍵と公開鍵作成を行った。
2/19
Github コンフリクトの発生と修正対応
同一のファイルで異なる内容があるとコンフリクトが起きることがある。作業ブランチを2つ作成し、それらをリモートに同期した。次にマージを行っていったが2つ目のマージでコンフリクトを起こし、mainからpullをしファイルの中身を変更しそれをpushすることによりコンフリクトを解消した。最後にローカルにもマージ後の内容をpullを使い変更を行った。githubは実際に触って慣れていくのがいいのかなと感じた。
2/20
todoアプリ
今日はアラートのボタンを押すとテキストが保存されそれをtableviewに表示させるのを目標に学習した。結果的にやり切ることはできなかったが、guard let を使いアラート入力値を取得して保存したいモデルをRealmの保存方法で実装した。その後データソースにしている配列に保存データを追加しそれを表示することはできたがリロードがうまくいっていない。この後アドバイスを意識しながらやってみたいと思います。
明日から少し不安なビジネスロジックがあるので基礎を振り返りつつやっていこうと思います。
2/21
ビジネスロジック(信号機)
todoアプリ
今日は信号機のビジネスロジックを作成することで思考プロセスを考える学習をした。まずstep1に仕様を考えてリスト化し、step2でswiftの実装を考えた。step3では例外ケースの案を出し、step4でそれを考慮したコードに書き換えた。
信号機の一定時間の処理を無限にループさせる処理はTimerクラスを用いて実装した。
todoアプリではtableViewのcellをスライドして削除できるように実装した。削除するとともにrealmからもデータを削除されるようにした。
2/22-23
GitHubの復習
ビジネスロジック
信号機の点灯のロジックは作成することに成功したがstep3の例外ケース(歩行者がボタンを押すと青に変わる)という実装で止まってしまっている。
分岐処理とフラグがわからなくなったので明日の課題が終わり次第またやってみます。
2/24
Xcodeのビューデバッガー
ブレークポイント
ビジネスロジック
ビューデバッガーとは、画面内のViewの階層関係が視覚的に分かりやすく表示することができる機能で、実際に自分のアプリでビューデバッガーを開き色々と触ってみた。表示されるべきViewが画面に表示されず、コードよりもまずはビューデバッガーで視覚的に確認したい時に使える。
Xcodeでは、ブレークポイントを使ってアプリの動きを指定した場所で止めることができ、どこのコードで問題が発生しているかの発見にとても有用である。自分もアプリ開発の際に使っていきたいと思います。
2/25
Xcode ブレークポイントの活用(LLDBコマンド)
Xcode step over, step in, step out
デバッグの心得
LLDBとは、ブレークポイントでアプリを停止した時に利用できる、Xcodeデフォルトのデバッガーのこと。今回はpoとexpressionの2つのLLDBコマンドを学んだ。poコマンドを使うと、止まった時点で定義されている変数の中身を確認することができ、それらを計算したりもできる。expressionコマンドを使い、expression 変数 = 値 というコマンドを打つことで、変数の中身を変更することができる。しかしexpressionだと定数の値は変更できない。
ブレークポイントでアプリを停止した際にステップ操作を行なってアプリの動きをコントロールする方法を3つ学んだ。
最初にstep overでメソッドの中身に入ることなく1行ずつ(1ステップ)動かしていくことができた。次にstep inは停止した行においてメソッドが呼ばれていた場合、そのメソッドの中身に移動するという挙動がstep overに加わったような動き。最後のstep outは停止している行のメソッドから抜け出すまでアプリを進める動きをします。実際にStep over、 Step in、 Step out を上手に活用することで、プログラムの動きの把握、バグの原因箇所の特定 を効率的に行えるようになる。
デバッグの心得ではバグが起きた際のデバッグでの考え方や効率的なデバッグなどを学んだ。
2/26
ビジネスロジック
メンタリング
だいぶ時間を費やしてビジネスロジックが終わったが、コードへの理解度が低いのでまずは時間がある時にメンタリング時の問題を解いてみようと思う。CLIでのgitの操作やgithubなども教材を読みながら振り返り復習してみたいと思います。明日からはtwitterアプリのフレームワークに取り掛かることに専念しようと思う。
2/27
Twitterサンプルアプリ用のワイヤーフレーム作成
引数と関数の簡単な問題
今日はdraw.ioというものを使い初めてワイヤーフレームを作成した。あまりうまくやろうとせず必要な部分だけを意識してシンプルに作成してみた。タイムライン画面、投稿画面、編集削除画面の3つを作成した。
今日は時間が余ったので引数を使った偶数の場合trueを返すといったシンプルな関数を作り学習した。引数は関数を実行するための必要な値として覚えるようにしたいと思います。
残りの時間はgit,githubの教材を復習して今日は終わりたいと思います。
2/28
引数と関数の簡単な問題
TwitterApp作成
今日は指摘のあった問題をもう一度調べながらコードを書いてみました。完璧とは言えないが以前よりかは返り値の理解が深まった気がします。確認だけお願いします!
ワイヤーフレームを確認してもらい、その後にプロジェクト作成をし、リポジトリも作成した。リポジトリにpushする前に.gitignoreファイルを設定し、.gitignoreファイルをプッシュした後にgit add -Aですべてのファイルをpushして最後に新しくブランチ作成を行なった。明日からUITableView作成から入っていきます。
2/29
TwitterApp作成
今日はUITableViewを配置し、その後にデフォルトのtableviewcellを設定しダミーデータを表示するところまでは進めました。ここからはtodoアプリで触ったカスタムセルの実装に入るのでzennに残した記事などを読み漁ろうと思います。
3/1
TwitterApp作成
今日はカスタムセルを作成し、カスタムセル内にLabelを2つ配置してAutolayoutを使い、なんとか表示することはできた。Autolayoutをうまく使いこなすことができず、ビルドすると1つのラベルしか表示されなくて時間がかかってしまった。結果的にautolayoutのエラーを自動的にfixする機能を使用して対処することになった。セルの高さ可変にも少し触れ、コード書いてみたがセルの内容が同じため可変にできたかはまだわからなかったです。明日からは投稿画面に遷移するための円形のボタン作成について調べてみようと思います。
TwitterAppの実装の進め方でこうしたほうがいいとかあったらアドバイスお願いします🙇
3/2
TwitterApp作成
今日は投稿画面の作成とそこに遷移するためのボタン作成にとりかかった。投稿画面までの遷移はすぐに実装できたがUIButton関連で時間がかかってしまった。Autolayoutでうまくいかず時間をかけすぎてしまい、そのあとは綺麗な円形のボタンにならず苦戦した。コードでボタンを作る方が簡単だと聞いたので今度はコードだけで実装にチャレンジしてみたいです。明日は投稿画面に遷移後に前の画面に戻れるように実装してみようと思います。
3/8
TwitterApp作成
今日はtextfieldの編集完了検知ができるようにコードを書き換えた。textfieldとtextviewでは異なったメソッド名で実装することを知った。その後に投稿ボタンでrealmで保存されているのかを確かめたかったのだが、接続するものを間違えていて上手くボタンが機能してなかった。凡ミスを少しでも失くしていきたいと思いました。最後に保存したデータをdelegateを使いHomeViewControllerに通知できるように少しだがコードを追加した。
3/11
TwitterApp作成
今日は数日間できなかったdelegateを使ってrealmのデータを渡す実装を完了することができた。
PostViewControllerのdelegteに受け取る側のインスタンスを代入していないことで上手くいかず、今回は segueを使っていたのでインスタンスの取得の仕方が異なっていた。ここら辺に関してはzennに参考した記事を追加しておいた。それから今までの無駄なrealmのデータはシュミレータ上でアプリを削除することで消すことができた。データを削除後にデータを追加してみたところ一文字ずつテキストが打たれるたびにデータが追加されていたので下記の画像部分を削除することで対処することができた。
3/13
TwitterApp作成
今日はまず最初に、投稿ボタンを押すとすぐに保存データをセルに表示するためにreloadDataをした。reloadDataの配置する場所がわからず少し時間がかかってしまったが、delegateでデータを受け取った時にsetTimeLineData()とself.tableView.reloadData()を書き込むことで実装できた。
そのあとはtextView文字制限の実装に取り掛かり、140文字以下は入力できないようにshouldChangeTextInというのを使い実装した。ついでにセルの選択解除も実装しておいた。
3/14
TwitterApp作成
今日はTwitterApp作成の最終に入り、残っている文字制限を追加した。textViewdidChangedとisEnabledを使って実装したがisEnabledはaction接続ではなくoutlet接続しなければエラーになる事を知り、outlet接続をすることで思う挙動になった。それからGithubにプッシュしたのだが上手くプッシュできていないので明日にまた原因を探ってみようかなと思います。
今日はメンタリング内容を見返して終わろうと思います。
3/15
TwitterAppをGithubにプッシュしマージ
オリジナルアプリ案を考える
今日はgithubにPRを作成しようとしたらそもそもログインできておらずPRが作成できずに時間をかけてしまった。凡ミスをなくしていきたいです。2回ほどブランチを作成しマージをしたりpullをしたりと実際に自分で触ったのでgithubへの理解が教材でやるより深まった気がします。
それからコンセプトシートを使い、自分の好きなことから派生させ作成できそうなアイデアが一つだけ浮かびました。この週末に残り2つほどアイデアが出せれたら良いなと思います。
3/20
ユニットテスト
メンタリング
今日は文字制限の141字のユニットテストを作成した。最初に自分だけでユニットテストを作成したのですが上手くかけず結局アドバイスありでなんとか作成することができました。テストするために新しく判定するロジックの関数を作り、textViewDidChangeの関数内を修正してテストを通すことができた。
メンタリングではアプリのコンセプトを決め、どのように進めていくべきかを教えてもらいとりあえずやらないといけないことを理解できたので明日から少しずつ進めていきたいと思います。
3/26
CodeStockApp作成
今日はホーム(自分用)にも季節タブを追加するためにワイヤーフレームと仕様書を変更した。その後にオリジナルアプリの作成に入り、最初にtabbarcontrollerを使ってタブで画面を2つに分けた。しかしコードで生成した方が後々、開発が楽ということでコードでtabbarcontrollerを書いた。その後にホーム(自分用、ネット用)のファイルとstoryboardを2つずつ作成した。
最終的に思っていた挙動にできず今日は終わった。
3/27
CodeStockApp作成
今日は昨日の続きでTabBarControllerをコードで書き、2つのViewController表示することを行なった。結果的にSceneDelegateの1部分が抜けていたのと、storyboardをインスタンス化することによって表示することができた。忘れないようにZennに記録しておこうと思います。
3/28
CodeStockApp作成
今日は昨日の続きのnavigationbarの設定を取り組んだ。navigationbarの背景色をうまく変更できずに止まっていたが、standardAppearanceとscrollEdgeAppearanceを使用することで思うように実装できた。コードで実装していく方法にもっと慣れていきたいと思いました。そのあとはtabbarの色の変更などのカスタムを調べたり実装したりした。教材にあったtabのアイコン設定を参考にしながらコードでアイコンを設定できた。
3/30
CodeStockApp作成
今日はparchment関連を調べて、ブランチを新しく変えてcocoapodsをインストールした。その後にparchmentのライブラリをインストールすることができた。それから4つの季節ごとのcontrollerファイルとstoryboardを作成して今日は終わりました。
4/1
CodeStockApp作成
今日はインストールしたparchmentライブラリを使って実際に4つのControllerを表示することを学習した。最初に参考にした記事通りに書いたが、表示するためのコードを完璧に書き終わる前にビルドしてしまっていて、なぜ表示されないのかを調べるという無駄な時間を作ってしまった。アドバイスの「プログラムは融通が効かないので全て指示することが必要」ということを学びました。コードの1行1行に意味があるので少しでも理解できるようにしていきたいです。
追加で新しくブランチを作成し、カスタムセル実装に入った。MainTableViewCellをxibで作成し、試しにネット用の春タブにTableViewを配置して表示できるかやってみた。UIコンポーネントの消し忘れが他の階層にあったせいでうまく表示されなかったが原因もわかり解決できた。
4/2
CodeStockApp作成
今日は昨日の続きで季節タブそれぞれにカスタムセルを表示することを実装した。xibファイルを再利用して季節タブそれぞれにカスタムセルを登録して表示することができた。さらにカスタムセルの背景色をRGBを使って変更してみたが色の選択は後々変えるかこのままにするかは迷っていて細かいデザインはとりあえず後回しにしてこうと思います。
4/4
CodeStockApp作成
最初にメンタリングで話した、画面の回転を固定する設定を行った。それからpresent遷移のことやUIBarButtonItemのことを調べた。それからgithubでのレビューをしてもらいアクセス修飾子を追加する修正をしマージした。
4/5
CodeStockApp作成
今日は最初にアプリのダークモード設定を行った。その後にUIBarButtonItemをコードで作成し、そのButtonを押すとpresent遷移する実装までできた。実装はできたのですがButtonを押すとerrorが出てきたが解決できそうな記事を、見つけcustom classでモジュールを設定してあげたら解決できた。その後にIBでキャンセルと投稿ボタンだけ作成して、キャンセルボタンで遷移元に遷移するようにした。
4/7
CodeStockAppの作成
今日はまず前回の続きの投稿画面の作成を行なった。最終的に画像を選択してiOSのファイルから画像を取得するにはどうしたら良いかわからずいくつかの記事を読みましたが、わからない部分が多くとりあえず画像選択の場所にはUIImageViewを設置しておきました。それから同じようにTextViewやUIButtonを設置して投稿画面は終わった。それからpodを使いRealmをインストールした。
4/8
CodeStockApp作成
今日はrealmに画像を保存させる実装やフォトライブラリにアクセスする実装を行なった。今回は初めて画像関連を触ってわからないことだらけだったのでもう少しだけ理解できるように記事を見返してみたいと思いました。とりあえずフォトライブラリにアクセスできるとこまでできたので続きは明日やりたいと思います。
参考にした記事はZennに記録しておこうと思います。
4/9
CodeStockAppの作成
最初にまずUIImageViewに格納された画像をRealmに保存する実装をした。saveImageメソッド内でUIImageViewを取得し、取得したものをData型に変更しそれをデータモデルのプロパティに代入し、データモデルをRealmに保存する流れで行なった。
そのあとはそれを確認するためにpostButtonでメソッドを書いたが引数のエラーが生じ、引数自体が必要ないことを知りメソッドの引数を消すと上手くrealmに保存することが確認できた。アドバイスの記事の外部引数と内部引数の指定や省略は勉強になった。
最後にUITextViewのtextをRealmに保存する実装を行い、引数の値の定義や値を代入してないことでエラーが起きて時間が少しかかってしまったが無事にできた。明日はrecordDateあたりを進めていきます。
4/10
CodeStockApp作成
今日は季節選択のボタンを押すとUIMenuで季節が4つ出てくるように実装を目指した。記事とYoutubeを参考にしてUIButton押すとUIMenuを表示させてそれらをタップするとprint文が出るとこまでは実装できた。
4/11
CodeStockApp作成
今日は自分用の投稿画面とデータモデルを作成した。最初に作成したネット用の投稿画面と同じ作りにするだけなので容易にできたが、画像をRealmに保存ができておらずnullになっていたので保存されいないと思ったいたがprint文を書く場所が間違っており最終的にRealmに画像を保存する関数内でprint文を書くことで保存確認ができた。このような凡ミスが多いので気おつけたいです。。。。
追加でOptionalや非Optionalがあまりわからなかったのでキータの記事を読んで少し理解できるようになった。
4/14
CodeStockApp作成
今日は保存したRealmのデータの受け渡し実装に入った。delegateを使い投稿ボタンを押すとデータの受け渡しを行えるようにコードを書いていったがまだセル自体に表示するところまで実装できなかった。Index out of rangeというエラーが出ていて調べたところcodestockListの配列が空なのでインデックスは範囲外というエラーが出ていると思われる。もう少し記事や作成したAppのコードを見てデータ渡しについて考えてみます。
4/15
CodeStockApp作成
今日はData?をDataに変更するためにアンラップを学んだ。安全なアンラップというものがあり、今回はif letを使用して画像がある時ない時で表示される画像を指定した。
それからAutolayoutを指定しておらずセルが長くなっていたのでAutolayoutoを設定することで良くなった。しかしまだ完璧に設定できておらず、MaintableViewCellのimageviewの横を0に設定したが両サイドに空白が空いてしまってそれの修正を進めます。
4/26
CodeStockApp作成
今日はUIImageViewを画像のサイズに合わせて表示する実装を取り組んだ。時間はかかってしまったけれどリサイズするためのコードを書いてビルドはできたが、Constraint関係でWarningが出ているのでそれを対処したいと思います。
4/30
CodeStockApp作成
今日はAutolayoutの調整をした。最終的には画像によってセルの可変ができたが、UIImageViewのHeightの最大値の設定ができないのが原因で画像によってセルが縦に長くなってしまっている。海外の記事を参考に最大値を設定してみたがまだ思った挙動にはならなかった。
Autolayoutが苦手なのでYoutubeでAutolayoutの制約動画を見て少しだけAutolayoutの学習をした。その後にPageViewControllerのindexの取得方法を調べて今日は終わりました。
5/1
CodeStockApp作成
今日は昨日の続きでUIImageViewのAutolayoutを触るところから始めました。UIImageViewの高さを2つ制約し、画像の高さを決める制約(優先度750)、画像の最大値を決める制約(優先度1000)を追加した。これらの設定をすることで最大値以上の値を設定した時、最大値側の値が優先されるようになった。それからNetViewController内の季節のインスタンスを共通化した。その後にPagingViewControllerの検知するようにコードを調べて少しそのコードを書いて今日は終わりました。
5/5
CodeStockApp作成
今日は取得したindexをaddvcに渡す実装に取り組んだ。最初に定義した変数に新しい変数を追加しようと考えていたのですが、そのようにするのではなく、AddViewController自体に代入できる型の新しい変数を定義する。そしたら代入できるようになったが代入したaddvcを新しいインスタンスで上書きしてしまっていて上手く値を渡せなかった。storyboard経由で作ったAddVCに代入することで挙動通りになった。
「値を渡すときは遷移先のインスタンスを取得し、遷移先の変数に値を渡す」
今日は自分が書いたデータ渡し周辺のコードをみて復習して終わります。
5/6
CodeStockApp作成
今日はNet用の残っていた季節3つのVCを整えた。それからどうやって遷移元の季節に保存するかを考えて言語化しようとしたが詰まってしまった。どうAddVCにある取得したgetindexを使って値を渡す分岐をするか分からず終わってしまった。
5/7
CodeStockApp作成
今日はindexを使用してどうそれぞれの遷移元に値を渡すかを考え検証しました。まだ上手くできてないですがもうちょっと自分で試してみます。
5/8
CodeStockApp作成と記事を読み漁り
今日も自分の中の仮説を検証したり検証するために記事を読み漁ったりしました。それ以外はクラス周辺のインスタンスやプロパティなどいった基礎の記事を読んだりして理解を深めました。現在取り組んでいる部分が実装完了次第、playgroundで自分のクラスを作成したりしようと思っております。今のところまだ上手くできていないので明日までできなかったら質問したいと思います。
5/10
CodeStockApp作成、Classとインスタンス復習
今日は季節それぞれのdelegateを表示しているaddvcに代入してあげることで無事に遷移元の季節にデータを渡すことができた。
classとインスタンに関してこの前のindexの値を触るあたりで学んだはずなのにまた同じミスをしてしまいそのミスを自分で気づけなかったのも悔しかったです。delegateを設定することは覚えていたがそれを設定してあげる変数のことも考えるべきでした。次頑張ろうと思います。。
あとは記事を読みながら自分でクラスを考えてplaygroundで色々試してみました。
5/13
UIMenu実装の練習
今日はUIMenuの記事を見ながら新しいプロジェクトにコードを書き、新たなプロジェクトにシンプルに書くことで理解がしやすかった。前にもUIMenuを作成したがそれらは削除して今回新規プロジェクトで作成したようなUIMenuを実装に取り入れていこうと思います。
5/15
CodeStockApp作成
今日はUIMenuボタンの実装を行いました。一昨日の作成した新規プロジェクトのようにUIMenuを実際のコードに追加してみた。思っていたようにできたのでよかったです。あとはUIMenuの遷移元に依らず保存できるように実装していきます。
今日はUIButtonのデザインも少し変更してみました。IBOutletのボタンはコードで角丸にできたのですが、IBOutletのアクションの方はやり方が分からずstoryboardで変更しました。
5/16
CodeStockApp作成
今日はUIMenuで押されたボタンを取得してそれをクラス直下に置き、postButtonで使用して押された季節に分けて保存先を変更する実装をした。それから季節選択ボタンを押してない場合はアラートを表示する実装を目指したが、アラート表示がされるもののすぐにアラームが消えてしまう挙動になってしまった。原因はアラートをpresent表示していてdismissで表示をすぐに消してしまっていたことでした。次はこの原因にも自分で気づけるといいなと思いました。