見出し画像

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

今回の概略

プロパティの setter,getter 内で 'self.自分' の場合、更に自分の setter,getter が呼ばれてしまい無限回廊へ落ちる模様😞
それを防ぐにはアンダースコアアクセスによる記述が必要みたい🤔
だけど `@property` で定義したプロパティの setter,getter を両方上書きした場合、アンダースコアアクセスの名前も自分で `@synthesize` で定義しなければならないみたい🙄

#学習記 #Objective_C
#EXC_BAD_ACCESS
#property #synthesize

【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 # ヘルプ

----備忘録
(現在無し)


前回の粗筋

EXC_BAD_ACCESS との戦いは続く…😞



対策

今回も EXC_BAD_ACCESS との戦いが始まるお…🙄

前回の無限回廊 TypeVal.setValue

無限再帰呼び出しでEXC_BAD_ACCESS
https://qiita.com/shtnkgm/items/82e1b51a56378af69b17

この記事は Swift だけど Xcode の吐くバイナリなので恐らくこれが合致してる挙動の方の EXC_BAD_ACCESS だと思う🤔

自動変数を初期化しなかったのが原因で EXC_BAD_ACCESS
https://xcatsan.blogspot.com/2009/09/excbadaccess.html

前回のエラーの画像を見る限り、このプログラムを読み込んで初期化する時に無限反復が起きてるっぽいかな🤔
関連記事からすると初期化をヘマって無限反復に陥って件の障害が発生しているのかと推測されるけど画像を見る限り入り口が NSString の isEqual になってるのよね…😑

うーん…本人TypeVal以外だと Record と DBADBAccessor が isEqual で呼び出してるけど………😑

もう TypeVal 全関数の初っ端にブレイク張ってどこが最初に掛かるか見るくらいしかわからんぽ😞
👇ぽちっとな


おやおや?
以外や以外。ちゃんと init から始まってるお🤔
ただ Thread の情報を見る限りだと RecordElement での global 変数を初期化していて呼ばれているっぽい😑
諸悪の根源 global 😞

ありゃ、確かにここで使ってるわさ🤤
でもこれ、一応正しい動作してる筈なのよね😞
そう考えるとやっぱり TypeVal のどこか、よろしくない書き方になってるという事なんだけど…🙄知見が少なくてワカラン

もう少しステップで進めてみるぽ😑

下手人発見😑
なんと、この行35の setter の `self.value =` で setValue自分 が呼ばれている🙄んなバカな
はぁ…そりゃ無限呼出しになるわ😞どうすんのこれ

Objective-Cのクラスやプロパティ、特徴的なメソッドの使い方
https://atmarkit.itmedia.co.jp/ait/articles/1404/09/news029_2.html

// 名前を設定する
- (void)setName:(NSString *)name
{
    _name = name;
}

Objective-C: プロパティの書き方
https://qiita.com/usagimaru/items/9689a36427ca74d27f25

- (void)setCount:(NSUInteger)count
{
    _count = count;

    // セッターで行いたい好きな処理.
    // ……
}

objective-cの基礎を学ぶ
https://zenn.dev/makumaaku/scraps/73e7e3eeed0f5d

// 名前を設定する
- (void)setName:(NSString *)name
{
    _name = name;
}

_人人人人人人人人人_
> アンダースコア <
> アクセスにしる <
 ̄Y^Y^Y^Y^Y^Y^Y^ ̄

まぁ、下手人発覚した時点でそうだろうなと思ったわのよ…😞

………

(全体の setter,getter を直す間)

………

大筋変更できたけど '_value' で文句言われてる😞
もしや予約語?🙄

[Objective-C]プロパティで躓いた…
https://anz-note.tumblr.com/post/122599314231/objective-c

これ、setter/getter の両方を自分で上書きするように書くと発生するんです
どっちか一方をコメントアウトしたら大丈夫

🙄🙄🙄❓❓❓❓❓
これ、以前片方しか書かなくて怒られたから両方書いた記憶が有るんだけど…?🤬

ほらほらほらほら🤬
でも上の記事を見る限りだと synthesize 書けば良いってあるから読み書きgetter,setter上書きoverrideしたら synthesize 要るのかな…めんどいお😞

🙄………
頑張って構造とか直したりしたけど、実はこの修正アンダースコアアクセスだけだったのでは…と思ったり思わなかったり…😞

まぁそれは AnalyzeArgs のオプションの方は構造を修正していないので動けばアンダースコアアクセスと synthesize のせいって事に😑


次回は

気を取り直して動作試験再開よ〜🤪

この記事が気に入ったらサポートをしてみませんか?