umetaberu

umetaberu

プログラミング技術に関するメモ書き

Containerについて

この記事の目的

Containerでできることを知る

Containerクラスとは?

・子ウィジェットをカスタムするためのウィジェット
・Swiftで言うUIViewのような使い方ができるため、何かとりあえず表示したい時とかに使える
・よく使うため、そもそもContainerなしではアプリ開発が始まらない

使ってみる

Container(
 color: Colors.lightGreenAccent,
 height: 100,
 width: 100,
)


Container
Containerを表示

まとめ

・Containerは子ウィジェットをカスタムするためのウィジェット
・widthとheightで自由にサイズを変更できる
・colorで色も追加できる

マイクラ:mcpipyでAttributeErrorが発生したときの対処法

何が起こったか?

MacBookでマインクラフトをやりたい。
Pythonを使って色々なことができるらしいから手順に沿って環境構築をしたものの、エラーが起きてしまった。。

エラー内容

今回マイクラpythonを使うにあたり行った手順と、エラーが起きた箇所は以下の通りだ。
①マイクラをダウンロード
②pyenvにてPythonのインストール
③forgeをダウンロード
④modsをゲームフォルダに格納
⑤mcpipyをゲームフォルダに格納
⑥Thonnyエディタにてコードを実行→エラー発生

原因

原因としては、Pythonを実行できる環境は揃っていたのにも関わらず実行時にエラーが出てしまっているためmcpipyの中でエラーが起こっている可能性がある。
mcpipyとはpythonで書かれたコードが一通り入っているフォルダの名前である。
フォルダの中身はマイクラPythonを実行するために必要なmcpiフォルダや、その上の階層には今回やりたかったゲーム内でお城を瞬時に作成したり、時計を出してみたりできるスクリプトが格納されている。
んで、案の定ネットで調べるとそのmcpipyフォルダの中のコードで不具合が発生していることがわかり、内容は非推奨のコードが使われていたことだった。

解決方法

参考URL
stackoverflow.com

ライブラリを疑うこともエラー解決の原因の一つであることを忘れてはならない。。

Objective-Cインスタンスメソッドとクラスメソッドの書き方

違い

  • + プラス  クラスメソッド
    • クラスの型から直接実行できる静的関数

[Person.h]

#import <Foundation/Foundation.h>

@interface Person : NSObject
// メソッド定義
-(void) doInstanceMethod;
+(void) doClassMethod;
@end

[Person.m]

#import クラス名.h
#import プロジェクト名-Swift.h

// Personクラス
@implementation Person: NSObject
// 動的関数:インスタンスメソッド
-(void)doInstanceMethod {
  // 処理
}

// 静的関数:クラスメソッド:静的:Swiftでいうstatic
+(void)doClassMethod {
  // 処理
}
@end

[HumanResources.m]

// インスタンス化
Person *myPerson = [[Person alloc] init];
// doSomethingメソッドを呼ぶ :インスタンスメソッド:動的
[myPerson doInstanceMethod];

// doSomethingElseメソッドを呼ぶ :クラスメソッド:静的:Swiftでいうstatic
[Person doClassMethod];

まとめ

クラスメソッドはインスタンス化しないといけない。
インスタンスメソッドはそのまま使えるが、値を直接書き換えているため注意が必要

簡易ローカルAPIサーバ作成手順(ruby)

内容

APIの疎通確認をしたいときに、ローカルAPIサーバをすぐに実行できるような状態を作っておきたかったため手順をまとめた

①gemとrubyのパス確認

which gem
which ruby

※システムのパスを指していたら、rbenvでrubyを管理するようにする

②rbenvをインストールする

brew update
brew install rbenv ruby-build

rubyのバージョンを確認する
システムを利用しているか確認

rbenv versions

④インストールできるrubyのバージョンを確認

rbenv install -l

⑤現行の安定板をインストール

rbenv install 3.1.2

⑥globalに指定する

rbenv global 3.1.2

// 確認する

rbenv versions

⑦パスを通す
// デフォルトシェルを確認する

echo $SHELL

// カレントディレクトリの情報を表示する

ls -a

// パスを通す

[[ -d ~/.rbenv  ]] && \
  export PATH=${HOME}/.rbenv/bin:${PATH} && \
  eval "$(rbenv init -)"

⑧確認する

which ruby
which gem

⑨pumaを入れる
sinatraを使うとき、このままだとアプリケーションサーバがないと言ったエラーを吐くので

gem install puma

⑩実行(api_server_test.rbは任意の名前)

 ruby api_server_test.rb

まとめ

ローカルサーバ作成用のファイルはネット上にたくさんあるため、
カスタムしたものを今度じっくり描きたい

Gitアカウントを複数所持してる時の注意点

内容

業務用と個人用の2つのGitアカウントを持っているとき、どうやって切り替えしたらいいか調べた。

現在のアカウントを確認する
git config --global user.name
git config --global user.email
あまり使わない or よく使う でアカウントを切り替える

自分の場合は個人用をサブ垢、メインを業務用とした。
その場合は、サブ垢(あまり使わない)はプロジェクト単位で設定する。

// まず個人用のプロジェクト直下に移動する
cd /プロジェクト直下 

// localをつけてアカウントを設定
git config --local user.name "アカ名"
git config --local user.email "メアド"

// 設定が反映されているか確認
cat ~/.gitconfig

気を付けること

個人用でGitアカウントを使っていて、切り替えをせずにGithubにコミットをすると草が生えない。
※別垢でコミットしているため
心配なら、git commitする時には、一度git logでAuthorが誰になってるか確認するとよい。

git log

Objective-Cの単一処理のIf文の中にNSlogを書くとそのメソッドが実行されない

内容

業務でObjective-Cで書かれたアプリをデバッグしてたら、ログを書いたところのメソッドが呼ばれない。どうしよう

何が悪いか?

単一処理の書き方なのに、returnとログの行で2つの処理がある

// ダメパターン例
if (a == -1 && b == -1)
      NsLog(@"test"); //1つめ
      return; //2つめはダメ

修正した後

複数書けるようにした。

//成功するパターン
if (a == -1 && b == -1){
     NsLog(@"test");
     return;
}

ObjCはメモリ管理やらメソッドの呼び方やら非同期やら覚えることが多いから頑張る

FirebaseにBMIデータを登録するIOSアプリを作る(Part.5-1)

やること
少し間が空いてしまいましたが、FirebaseにBMIデータを登録するアプリを完結させたいと思います。

 

...はい。申し訳ありません。

テキスト形式で説明するといつの間にかブログが長くなってしまうことに気付きました。

なので、今回からもう少し章を小分けにしたいと思います。

このままだと、説明を大きく省略してしまいそうなので目次を更新しました。

更新した目次は以下のとおりです。


目次
Part1. 全体図を把握するのとプロジェクト作成まで
Part2. 画面周りを作成する
Part3. Firebase連携準備
Part.4 コードと画面を接続させる

Part.5 Firebaseへデータを登録する

 Part.5-1 ボタンとラベルをコードと紐付ける 追記

 Part.5-2 データ登録処理① 追記

 Part.5-3 データ登録処理② 追記

Part.6 Firebaseからデータを取得する 追記

 Part.6-1 ボタンとラベルをコードと紐付ける(Get編) 追記

 Part.6-2 データ取得処理① 追記

Part.7 完成・動作確認 追記

 

環境
Xcode: ver12.0.1
Swift5
MacOS: MacOS Catalina 10.15.7

 

それではFirebaseにデータを登録し、取得していきましょう。

とは言いましたが、まずFirebaseにBMIデータを登録しないとそもそも取得できません。

データを登録するところから始めます。

Firebaseへデータを登録する(Post)

ViewControllerのボタン「BMIを登録する」より[Ctrl]キーを押下しながらD&D(ドラッグアンドドロップ)で PostViewControllerへ接続しましょう。

f:id:bangbang400cc:20201213173942p:plain「Show」で紐付けます。

f:id:bangbang400cc:20201213174153p:plain

このような感じになると思います。この状態で既にボタンを押下した際に画面遷移ができると思います。

f:id:bangbang400cc:20201213174740p:plain
 右側の「ユーティリティーエリア」と呼ばれるメニューから「Presentation」の部分を「FullScreen」に変更すると画面遷移後に遷移先の画面が全画面表示になります。f:id:bangbang400cc:20201213175240p:plain

画面を確認すると、全画面表示になっていると思います。

が、今回は「Automatic」のままで進めたいと思います。

f:id:bangbang400cc:20201213175955p:plain

次は「PostViewController.swift」へコードを記述していきます。

下記画像はコメントアウトを消した状態の画面になります。

f:id:bangbang400cc:20201213180534p:plain

2画面表示にしてからボタンとラベルの紐付けを行います。

既に1つのテキストラベルの紐付けが完了しています。

f:id:bangbang400cc:20201213181517p:plain

次はボタンを紐づけていきます。同じようにD&Dです。

名前はそれぞれ

身長を入力するラベル:heightTextLabel

体重を入力するラベル:boundsTextLabel

登録ボタンの名前:registerBtn

としています。ネーミングセンスは悪いですね。実施する方は、もう少しわかり安いネームにしてください。

f:id:bangbang400cc:20201213183746p:plain

最後に登録ボタンを押下した際の動きを記述するメソッドも生成しましょう。

今度はviewDidLoadの下あたりにD&Dしましょう。

「Connection」の部分が「Action」になっていればOKです。

f:id:bangbang400cc:20201213184647p:plain

下図のようになっていれば紐付けができています。

f:id:bangbang400cc:20201213185005p:plain

今回はこんなところでしょうか? 

ブログで説明する大変さがわかりました。とても勉強になったので次回から作ったアプリの作り方を紹介する際には見積もりには気をつけたいと思います。