0

フォーラムで何時間も過ごした後、私はまだこれを理解できません。

シナリオ: 展開可能なリストを含むテーブル ビューがあります。ユーザーがリストを展開したい場合は、ヘッダーをクリックすると、テーブルが新しいカウント値で更新されます。テーブル ヘッダー ビューは次のとおりです。

[MonoTouch.Foundation.Export("tableView:viewForHeaderInSection:")]
public override  UIView GetViewForHeader (UITableView tableView, int section)
{
    float headerHeight= ...;
    UIView headerView = new UIView (new RectangleF ...);

    UIButton button1=new UIButton(new RectangleF (...));

    //set label for button
    UILabel labelTextButton = new UILabel(new RectangleF ...);
    labelTextButton.Text=...;
    labelTextButton.Lines=2;

    button1.AddSubview(labelTextButton);

    button1.TouchUpInside+= (sender, e) =>{

        ...
        tableView.ReloadData();
    };

    headerView.AddSubview (button1);

    return headerView;
}
  • シミュレーターで実行すると、最初の実行時に常に次のようなエラーが表示されます。
       スタックトレース:
     at (ラッパーマネージドからネイティブ) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr)
  /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 の MonoTouch.UIKit.UIApplication.Main (文字列[]、文字列、文字列) [0x0004c] で
       XXX.Mobile.IOS.Application.Main (文字列 []) [0x00000] で ..../Main.cs:17
       at (ラッパー ランタイム呼び出し) .runtime_invoke_void_object (オブジェクト、intptr、intptr、intptr)
    ネイティブ スタック トレース:
    0 XXXXXXXXX 0x000a4d6c mono_handle_native_sigsegv + 284
    1 XXXXXXXXX 0x00018668 mono_sigsegv_signal_handler + 248
    2 libsystem_c.dylib 0x96a028cb _sigtramp + 43
    3??? 0xffffffff 0x0 + 4294967295
    4 UIKit 0x018bf258 -[UIApplication send Action:toTarget:fromSender:forEvent:] + 61
    5 UIKit 0x01980021 -[UIControl sendAction:to:forEvent:] + 66
    6 UIKit 0x0198057f -[UIControl(内部) _sendActionsForEvents:withEvent:] + 578
    7 UIKit 0x0197f6e8 -[UIControl touchesEnded:withEvent:] + 546
    8 UIKit 0x01b831d3 _UIGestureRecognizerUpdate + 7407
    9 CoreFoundation 0x03ee2afe __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
    10 CoreFoundation 0x03ee2a3d __CFRunLoopDoObservers + 381
    11 CoreFoundation 0x03ec07c2 __CFRunLoopRun + 1106
    12 CoreFoundation 0x03ebff44 CFRunLoopRunSpecific + 276
    13 CoreFoundation 0x03ebfe1b CFRunLoopRunInMode + 123
    14 GraphicsServices 0x04e8a7e3 GSEventRunModal + 88
    15 GraphicsServices 0x04e8a668 GSEventRun + 104
    16 UIKit 0x018bbffc UIApplicationMain + 1211
    17??? 0x0eeb24ed 0x0 + 250291437
    18 ??? 0x0ec26f40 0x0 + 247623488
    19??? 0x0ec26b48 0x0 + 247622472
    20??? 0x0ec26c9e 0x0 + 247622814
    21 XXXXXXXXX 0x0001ca32 mono_jit_runtime_invoke + 722
    22 XXXXXXXXX 0x00180b0e mono_runtime_invoke + 126
    23 XXXXXXXXX 0x00184d04 mono_runtime_exec_main + 420
    24 XXXXXXXXX 0x0018a0f5 mono_runtime_run_main + 725
    25 XXXXXXXXX 0x0007a0c5 mono_jit_exec + 149
    26 XXXXXXXXX 0x00218ac4 メイン + 1988
    27 XXXXXXXXX 0x000159cd 開始 + 53
    ================================================== ===============
    ネイティブ コードの実行中に SIGSEGV を取得しました。これは通常、
    mono ランタイムまたはネイティブ ライブラリの 1 つでの致命的なエラー
    アプリケーションで使用されます。
    ================================================== ===============

アプリケーションが終了し、シミュレータのホームページが表示されます。(MonoTouch からではなく) シミュレータ インターフェイスからアプリケーションを再起動すると、毎回完全に動作します。

  • アプリケーションをデバイスにロードする場合:

最初の実行では問題なく動作しますが、時々 (1 日 3 回) アプリケーションがシミュレーターと同じようにハングアップしますが、別のエラーが発生します。

         2013-04-10 16:03:16.838 XXXXXXXXX[2480:907] -[CALayer BridgeSelector]: 認識されないセレクターがインスタンス 0x2101da0 に送信されました
         2013-04-10 16:03:24.294 XXXXXXXXX[2480:907] 未処理のマネージ例外: Objective-C 例外がスローされました。名前: NSInvalidArgumentException 理由: -[CALayer BridgeSelector]: 認識されないセレクターがインスタンス 0x2101da0 に送信されました (MonoTouch.Foundation.MonoTouchException)
          /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 の MonoTouch.UIKit.UIApplication.Main (System.String[] args、System.String principalClassName、System.String delegateClassName) [0x0004c] で
      XXX.Mobile.IOS.Application.Main (System.String[] args) [0x00000] で ...../Main.cs:17
        スタックトレース:
        ネイティブ スタック トレース:
        0 XXXXXXXXX 0x007ff711 mono_handle_native_sigsegv + 244
        1 XXXXXXXXX 0x0083b8cd sigabrt_signal_handler + 112
        2 libsystem_c.dylib 0x3a847e93 _sigtramp + 42
        3 libsystem_c.dylib 0x3a83e123 pthread_kill + 58
        4 libsystem_c.dylib 0x3a87a973 中止 + 94
        5 XXXXXXXXX 0x0089a230 monotouch_throw_monotouch_exception + 0
        6 XXXXXXXXX 0x007fd0e9 mono_invoke_unhandled_exception_hook + 92
        7 XXXXXXXXX 0x007b55e3 mono_thread_abort + 46
        8 XXXXXXXXX 0x007ff3e7 mono_handle_exception_internal + 2138
        9 XXXXXXXXX 0x007ff4b5 mono_handle_exception + 12
        10 XXXXXXXXX 0x0083ab31 mono_arm_throw_exception + 132
        11 XXXXXXXXX 0x003ba468 throw_exception + 68
        12 XXXXXXXXX 0x0089a27c monotouch_exception_handler + 0
        13 XXXXXXXXX 0x0089a32c objc_skip_type + 0
        14 コアファウンデーション 0x3252557f + 614
        15 libobjc.A.dylib 0x3a3c9a65 + 128
        16 libc++abi.dylib 0x39e1607b + 78
        17 libc++abi.dylib 0x39e16114 + 19
        18 libc++abi.dylib 0x39e17599 cxa_current_exception_type + 0
        19 libobjc.A.dylib 0x3a3c99d1 objc_exception_rethrow + 12
        20 CoreFoundation 0x3246bf21 CFRunLoopRunSpecific + 456
        21 CoreFoundation 0x3246bd49 CFRunLoopRunInMode + 104
        22 GraphicsServices 0x360202eb GSEventRunModal + 74
        23 UIKit 0x34381301 UIApplicationMain + 1120
        24 XXXXXXXXX 0x0013950c wrapper_managed_to_native_MonoTouch_UIKit_UIApplication_UIApplicationMain_int_string _intptr_intptr + 240
        25 XXXXXXXXX 0x00674f70 XXX_Mobile_IOS_Application_Main_string__ + 152
        26 XXXXXXXXX 0x00384db0 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 200
        27 XXXXXXXXX 0x007b7b7f mono_jit_runtime_invoke + 1054
        28 XXXXXXXXX 0x008315ab mono_runtime_invoke + 90
        29 XXXXXXXXX 0x00834457 mono_runtime_exec_main + 306
        30 XXXXXXXXX 0x008346ab mono_runtime_run_main + 482
        31 XXXXXXXXX 0x007d35db mono_jit_exec + 94
        32 XXXXXXXXX 0x00888584 メイン + 2220
        33 XXXXXXXXX 0x000143e4 開始 + 40
    ================================================== ===============
    ネイティブ コードの実行中に SIGABRT を取得しました。これは通常、
    mono ランタイムまたはネイティブ ライブラリの 1 つでの致命的なエラー
    アプリケーションで使用されます。
    ================================================== ===============
    

Monotouch の GC のバグなのか、何か間違ったことをしているのかわかりません。インスタンスに送信された無効なセレクターが解決されたことをどこかで読みました。ボタン イベント ハンドラにブレークポイントを設定しようとしましたが、そのポイントに到達しません。

フォーラムの他の投稿では、変数をグローバルとして配置することを提案していましたが (良いプログラミング手法ではありません)、それもうまくいきませんでした。

私の構成:

    Xamarin スタジオ
    バージョン 4.0.3 (ビルド 13)
    ランタイム:
        モノ 2.10.12 (モノ-2-10/c9b270d)
        GTK 2.24.16
        GTK# (2.12.0.0)
        パッケージバージョン: 210120000
    Apple 開発者ツール
    Xcode 4.6.1 (2067)
    ビルド 4H512
    Xamarin.Mac
    Xamarin.Mac: インストールされていません
    Xamarin.iOS
    バージョン: 6.2.2.8 (ビジネス版)
    ビルド日: 2013-02-04 17:10:37-0400
    ビルド情報
    リリース ID: 400030013
    Git リビジョン: fae7c2bde0e8d51943fbd6afa22d7d2bb7a1192f
    ビルド日: 2013-03-21 19:16:39+0000
    Xamarin アドイン: 906a1edff23bcfd0ab7518463620a8ee506eaea2
    オペレーティング·システム
    Mac OS X 10.8.3
    
お時間をいただきありがとうございます

オビディウ

4

2 に答える 2

0

同じ問題を抱えている人のために:

Xamarin.IOS の新しいバージョンでは、GC がより積極的であることがわかりました。

上記のコードですべてを試しましたが、何も機能しませんでした。

GC は、テーブル デリゲート メソッド内で宣言された変数を保持していないと思います。そこで宣言されたボタンは、GC によって取得されるのが早すぎます。テーブルセルのデキューに何か問題があるのか​​もしれません。

とにかく、プロジェクト オプションから SGEN ビルド オプションを無効にしました。そこには実験的だと書かれています。

これで問題は解決しました。これが最善の解決策かどうかはわかりませんが、アイデアはありません。これらのメモリ/割り当ての問題をデバッグできないのはイライラします。

SGen を無効にしてメモリ割り当てを Instruments に確認しましたが、メモリは以前ほど割り当て解除されていません。

私の解決策は回避策であるため、これを解決済みとしてマークしません。SGen はこのように動作するべきではありません。

よろしくお願いします、

オビディウ

于 2013-04-23T10:10:27.620 に答える
0

私もちょうどこの問題にぶつかっていたのですが、Ovidiu のおかげで数時間のデバッグを節約できました。それは私にとってもGCの問題でした。他の人がこれに当たった場合に備えて、関数ではなくクラスで UIBUtton を定義することで GC を回避しました。

于 2013-04-24T19:45:19.470 に答える