見出し画像

【Console Application】ファイルとデータベース 306【学習記】

今回の概略

原本を確認したら addRecord でうまいこと self.record が null でも動くように作られていた😑
それを他の List から配列への変換と勘違いして捨ててしまってその先の merge でぬるぽってた😞

#学習記 #Objective_C

【Console Application】ファイルとデータベース【学習記】
仕様
https://note.com/sayka/n/nb8a67fa90a64?magazine_key=m7bb64c6a359f#br1mB

仕様
レコード
・レベル
 1-12
・難易度
 b,n,h,a,l
・曲名
・ランプ
 -,x,a,e,c,h,e,f

オプションスイッチ
-u file.csv # 更新(略値)
 ファイル名だけ指定した場合更新処理と見做す
-d file.csv # 削除
-p # csv 出力(略値)
 何も指定せずに起動した場合出力処理と見做す
-v # バージョン
-h # ヘルプ

----備忘録
Record.setValueWithArrayString 内の値設定処理がおかしい


前回の粗筋

addRecords で self.record が空のままなんだけど…🙄



デバグ

さて…なんで self.record に何も入ってないのん…?

addRecord 見る限りではちゃんと処理は書かれてるお😑
(ちゃんと動作するとは言ってない)

_init を見ると record を初期化してる場所が見当たらない…😑コレノセイ?

原本を見ると同じ様に _init には特に書いて無くてフィールド宣言のところでは null を入れて終わりになってて、検索で探して new で器を作っているのが loadTable のこの箇所616行のみ…😑

勿論 OCObjective-C 側でも loadTable で new が掛かってるから原本でも探せば -u で addRecords 呼ぶ前とかにどこかで record へ器を作っている筈なんだけど…😑

………これ以上はあれこれ考えるより動かした方が良いか🤤

……… stack には積まれるけど addRecord では self.record が nil のままで素通りしてるお…😑
どこにも self.record を初期化する処理が無い…🙄
原本の main の -u を追いかけても dba.addRecords 呼ぶまで特に new されてる形跡が無いお…🤔

_人人人人人人人人人_
> なぜ動いてるの <
 ̄Y^Y^Y^Y^Y^Y^ ̄

いいや、原本は Java なんだから動作させた時にぬるぽって絶対どこかで器確保を書き足してる筈😑
(なお OC は nil にメッセージ送っても無視されて処理が続行)

原本の addRecord
OC の addRecord

うわー…原本、めっちゃ小細工してあった🙄
record が List<Record> 「ではなく」 Record[] なので List で項目追加して Record[] へ変換して self.record の新たな値として入れ替えてる🙄
で、 OC では他でも配列のフィールドに追加する場合に一旦 List にして増やして配列に変換して差し戻す、ってやってるんだけどここも同じだと思って単純な addObject にしちゃってて…って事みたい😑
原本のここの紛らわしい点は self.record が null のままでも追加される書き方をしてるってとこ🙄
こんなん見落とすわ😞

まぁ、要するに「プロパティは init で全て初期化しましょう」という有り難い教訓😞
こういう事が起きるので口酸っぱくどの言語でもメンバーなりプロパティを初期化せよって警告やエラーを出すわけ🙄
原本作った時に未初期化の null を想定したまま作ったのが良くなかった😞

ぶほ😫
そうだったわ、 CSV から record にするの失敗して値がおかしくなってるの忘れてた🤪
件数合ってて record のデータが充填されてるから一先ず進めたんだっけ…😞備忘録とは


次回は

てことで csv の情報を正しく record にできない問題を解決するぽ🙄
今回は merge での障害を治したからヨシって事で🤤

いいなと思ったら応援しよう!