モノタッチ5.2.13
MonoTouchバインディングを介してネイティブObjectiveCライブラリを使用しています。ライブラリはViewControllerを公開します。ビューコントローラをサブクラス化するまで、すべてが正常に機能しています。次に、NULL参照例外が発生するか、UIの一部が表示されません。
btouchツールと「-e」オプションの問題について読みました。しかし、私が見ることができることから、オプションは存在しません:
ツール/Developer/ MonoTouch / usr / bin / btouchの実行は、引数で開始されました:/d:DEBUG ApiDefinition.cs /s:StructsAndEnums.cs / tmpdir:obj / Debug / ios / / sourceonly:obj / Debug / ios//sources。リスト
サブクラスは(この例では)機能を追加しませんが、それを使用するだけでバインディングを解除できます。
// Works.
var contr = new NativeController();
// Fails with various errors. Throws a NULL reference exception about some UIPopoverController being NULL, for instance.
public class SubclassedController : NativeController
{
public SubclassedController() : base()
{
}
}
var contr = new SubclassedController();
[NullAllowed]をプロパティに追加すると、NULL参照例外が解決されることがわかりました。
ネイティブコントローラーはプロパティを公開します(nonatomic, strong) UIPopoverController *popoverController
。これは次のようにバインドされていましたUIPopoverController PopoveController {get; set;}
-ここに追加するNullAllowed
と問題が解決しました。
しかし今、私は画像が表示されないという問題に直面しており、明らかな例外はありません。
これらの問題は、サブクラス化されたバージョンを使用するときに何かがNULLであるという事実にも起因すると思いますが、ネイティブコードはNULLに反応し、それを適切に処理するようです。
これは3つの質問につながります:
- サブクラス化を使用すると動作が異なるのはなぜですか?これを実現するためにMonoTouchは何をしていますか?派生クラスを使用する場合、なぜNULL参照を取得するのですか?どちらの場合も、UIPopoverControllerには触れていません。
- 何が問題なのか、エラーがない場合はどうすれば修正できますか?
- NullAllowed以外に、他に何を処理する必要がありますか?