忍者ブログ
ちょっとは人のためになる事をしないとインターネットコミュニティーの皆様に申し訳がないかと思いながら、自分の備忘録ていどでしかなく、実際の所たいした情報も提供できないでいるブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

デバッグに便利。

[NSThread callStackReturnAddresses] は現在の関数呼び出しのスタックの配列を返す。

init などで NSLog するとか、インスタンス変数に copy しておくとかすると、何か問題が起きたとき、どういうコンテキストで作成または操作されたオブジェクトなのかが一目瞭然。


プログラムが止まったとき、インスタンス変数にコピーしたスタック値をデバッガで Print Descriptions to Console でダンプ。



こんな感じのダンプが得られるので、value=の値のコードを見れば良い。

<CFArray 0x16b6b30 [0x30307a00]>{type = immutable, count = 34, values = ( 0 : <CFNumber 0x575d5b0 [0x30307a00]>{value = +177430, type = kCFNumberSInt64Type} 1 : <CFNumber 0x575d5f0 [0x30307a00]>{value = +179341, type = kCFNumberSInt64Type} 2 : <CFNumber 0x575d6f0 [0x30307a00]>{value = +810632758, type = kCFNumberSInt64Type} 3 : <CFNumber 0x575d6b0 [0x30307a00]>{value = +810639143, type = kCFNumberSInt64Type} 4 : <CFNumber 0x16b15e0 [0x30307a00]>{value = +810640304, type = kCFNumberSInt64Type} 5 : <CFNumber 0x16b15f0 [0x30307a00]>{value = +810632758, type = kCFNumberSInt64Type} 6 : <CFNumber 0x575d790 [0x30307a00]>{value = +810631221, type = kCFNumberSInt64Type} 7 : <CFNumber 0x575d7a0 [0x30307a00]>{value = +179617, type = kCFNumberSInt64Type} 8 : <CFNumber 0x575d850 [0x30307a00]>{value = +810632758, type = kCFNumberSInt64Type} 9 : <CFNumber 0x575d860 [0x30307a00]>{value = +810639143, type = kCFNumberSInt64Type} 10 : <CFNumber 0x575d870 [0x30307a00]>{value = +810753438, type = kCFNumberSInt64Type} 11 : <CFNumber 0x575d890 [0x30307a00]>{value = +810632758, type = kCFNumberSInt64Type} 12 : <CFNumber 0x575d8a0 [0x30307a00]>{value = +810631221, type = kCFNumberSInt64Type} 13 : <CFNumber 0x575d8b0 [0x30307a00]>{value = +810877125, type = kCFNumberSInt64Type} 14 : <CFNumber 0x575d810 [0x30307a00]>{value = +34718, type = kCFNumberSInt64Type} 15 : <CFNumber 0x575d820 [0x30307a00]>{value = +21280, type = kCFNumberSInt64Type} 16 : <CFNumber 0x575d830 [0x30307a00]>{value = +815263300, type = kCFNumberSInt64Type} 17 : <CFNumber 0x575d8d0 [0x30307a00]>{value = +815243017, type = kCFNumberSInt64Type} 18 : <CFNumber 0x575d8e0 [0x30307a00]>{value = +815261089, type = kCFNumberSInt64Type} 19 : <CFNumber 0x575d8f0 [0x30307a00]>{value = +815242536, type = kCFNumberSInt64Type} 20 : <CFNumber 0x575db10 [0x30307a00]>{value = +815240215, type = kCFNumberSInt64Type} 21 : <CFNumber 0x575db20 [0x30307a00]>{value = +814969849, type = kCFNumberSInt64Type} 22 : <CFNumber 0x575db30 [0x30307a00]>{value = +814971087, type = kCFNumberSInt64Type} 23 : <CFNumber 0x575da50 [0x30307a00]>{value = +814813151, type = kCFNumberSInt64Type} 24 : <CFNumber 0x575da60 [0x30307a00]>{value = +814722763, type = kCFNumberSInt64Type} 25 : <CFNumber 0x575da70 [0x30307a00]>{value = +814748641, type = kCFNumberSInt64Type} 26 : <CFNumber 0x575d910 [0x30307a00]>{value = +839148405, type = kCFNumberSInt64Type} 27 : <CFNumber 0x575d920 [0x30307a00]>{value = +807687520, type = kCFNumberSInt64Type} 28 : <CFNumber 0x575d930 [0x30307a00]>{value = +807683624, type = kCFNumberSInt64Type} 29 : <CFNumber 0x575d990 [0x30307a00]>{value = +839142449, type = kCFNumberSInt64Type} 30 : <CFNumber 0x575d9a0 [0x30307a00]>{value = +839142646, type = kCFNumberSInt64Type} 31 : <CFNumber 0x575d9b0 [0x30307a00]>{value = +814752238, type = kCFNumberSInt64Type} 32 : <CFNumber 0x575d950 [0x30307a00]>{value = +9444, type = kCFNumberSInt64Type} 33 : <CFNumber 0x575d960 [0x30307a00]>{value = +9298, type = kCFNumberSInt64Type}

アドレスからソースコードを表示させるには、デバッガで

list *アドレス

とする。

スタックトップから2番目の関数の場合、
list* 179341
みたいな感じ。

例外で止まったときの対処とほぼ同じで、大きめのアドレスはシステムライブラリ内(ソースは出ない)小さめのアドレスはユーザーコード(ソースが出る)なので、小さいアドレスをピックアップして呼び出しもとを特定するのが吉。

PR
kABPersonPhoneProperty
kABPersonInstantMessageProperty
などのアドレスブックに使う定数

ABPeoplePickerNavigationController
アドレスブックを表示するためのコントローラーオブジェクト

これらを使った関数が一度目の起動では動作不良、2度目はちゃんと動くということに出くわした。

具体的にはこう
1) ローカル変数のNSArrayにNSNumberしたkABPersonPhoneProperty などを入れる
2) ABPeoplePickerNavigationController を alloc / init
3) ABPeoplePickerNavigationController.displayProperties に 1)のNSArrayを代入

これだと、配列要素の NSNumber が全部0なんだ。もちろん期待通りの動作はしない。

順番を入れ替えたら動く。
1) ABPeoplePickerNavigationController を alloc / init
2) ローカル変数のNSArrayにNSNumberしたkABPersonPhoneProperty などを入れる
3) ABPeoplePickerNavigationController.displayProperties に 2)のNSArrayを代入

こうすれば、配列要素にはそれぞれそれらしい値が入ってくる。

はあ、ABPeoplePickerNavigationController -init の中で定数値を初期化してるんだあ。と合点。ふつうはしないだろそれ〜って感じですが。

気味悪いので、初期化のためにmain()で
[[[ABPeoplePickerNavigationController alloc] init] release];
とやってやったのだっが、これは何かに引っかかり関数内でHALT

-(void)applicationDidFinishLaunching:(UIApplication *)application
の先頭で同コードを追加してスッキリ(でもないか)
日本語環境でXcode 3.1.2を使うとき、ターゲットアプリケーション「一般」の「リンク済みライブラリ」にプロジェクト内のスタティックライブラリを追加できない。


ウィンドウ左下の+を押して libTheLibrary.a を追加しても「リンク済みライブラリ」に加わってくれないのだ。

英語環境で動かして比べてみると、明らかに違う。



日本語では「リンク済みライブラリ」英語では "Linked Libraries" の部分、日本語では Foundation.framework等デフォルトで組み込まれるはずのライブラリすら表示されていない。

要は日本語特有か、英語以外で発生するのか。いずれにせよXcodeは英語で使わなければならないようだ。
これは間違い
self.navigationController.title = @"A";
表示されない


以下のどちらかを使う

self.title = @"B";
self.navigationItem.title = @"C";
Interface Builder での構成ミス。

接続対象の IBOutlet がなくなっているなど。nibを開いて ⌘I で警告がないか確認。
Tab Bar Controller に配置した nib の場合、Tab Bar Controller 内においたプロクシオブジェクトのクラスとnib本体のクラスが一致していないと起きる。

キーボードが表示または非表示になった契機は UIWindow に対する Notification で取ることができる
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasHidden:) name:UIKeyboardWillHideNotification object:nil];
キーボードが表示、または非表示になったときビューのサイズを変更しなければならない場合がある。キーボードのサイズは Notification オブジェクトの userInfo から取得することができる。
- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
    CGRect keyboardRect = [aValue CGRectValue];
これで、keyboardRect がキーボードの表示領域が得られる
 インストールが長いので iPhone SDK 2.1 の新機能を翻訳しておく

iPhone OS SDK を含む非Mac OS Xプラットホームのターゲットをサポートする
Mac OS X 10.5 SDK のための GCC 4.2 と LLVM GCC 4.2 コンパイラ
新規プロジェクト、ターゲット、ソースファイル作成のアシスタントが更新
ツールバーは単一のポップアップでプラットホーム・ターゲット・デバッグ/リリースを切り替える
Subversion 1.5に対応した統合されたSCM


忍者ブログ [PR]
カレンダー
10 2019/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[02/07 @naoshi65536]
[02/07 忍]
[09/18 とおりすがり]
[06/26 ilmare]
[03/16 とおりすがり]
最新TB
プロフィール
HN:
naoshi
性別:
男性
職業:
ソフトウェア技術者
趣味:
料理
自己紹介:
@naoshi65536 で連絡がつくはずです。
バーコード
ブログ内検索
カウンター
アクセス解析
FX NEWS

-外国為替-