0

アプリケーションで *.epub ファイルを開こうとしていますが、UIDocumentInteractionController クラスでそれを作成する方法がよくわかりません。公式の IOSドキュメント例、およびネット上ののいくつかを見てきましたが、そのクラスがどのように機能するかわかりません。これは私がそれを行う方法、私が達成すること、そして私が理解していないことです:

UIButton を持つ UIView があります。

using MonoTouch.UIKit;
using MonoTouch.Foundation;
using System.Drawing;

public class MyView : UIViewController
{
    UIButton myBtn;

    public MyView() :base()
    {
        View.Frame = new RectangleF(0,0,1024,768);

        var myRect = new RectangleF(300,300,100,50);

        myBtn = UIButton.FromType(UIButtonType.RoundedRect);
        myBtn.Frame = myRect;
        myBtn.TouchUpInside += delegate
        {
            var dic = UIDocumentInteractionController.FromUrl(new NSUrl("http://192.168.50.50:2020/myfile.epub"));
            var dicDel = new UIDocumentInteractionControllerDelegate();
            dic.Delegate = dicDel;

            InvokeOnMainThread(delegate
            {
                var result = dic.PresentOpenInMenu(myRect, View, true);
                //If I do this -> NullReferenceException because delegate is null (something about autorelease?? Don't know)
                if(!result) dic.Delegate.DidDismissOpenInMenu(dic);
            });


        }
    }
}

最も奇妙なことは、PresentOpenInMenu() メソッドを呼び出す前に "dic" (デリゲートなし) をデバッグおよび検査すると、メニューが表示されます (true を返す) が、それを実行した直後にアプリが Main.cs で爆発します。わからない。

私は少し迷っています。誰かがこのクラスを理解するのを手伝ってくれますか?どうすれば正しく動作させることができますか? 前もって感謝します。

EDIT:ちなみに、* .txtファイルも同じ結果で使用しました。

4

1 に答える 1

0

MonoTouch のバグのようです。UIDocumentInteractionController.Delegate(またはプロパティを設定してからWeakDelegateその値をクエリすると、nullが返されます (後で失敗します)。

このバグを調査し、回避策を提供できる場合はこの回答を更新します (MonoTouch の将来のリリースでバグが適切に修正されるまで)。

UPDATE :UIDocumentInteractionControllerすでに独自の内部を作成しているUIDocumentInteractionControllerDelegateため、作成する必要はありません。Delegate メソッドなどDidDismissOpenInMenuは、それ自体のイベントとして利用できますUIDocumentInteractionController

独自のデリゲート (作成と設定) を削除し、イベントを使用すれば問題ありません。

UPDATE #2 :Delegateデフォルトはそのままでは使用できないため、プロパティは null を返しますUIDocumentInteractionControllerDelegate。それは、あなたが望むことを行うために継承され、カスタマイズされることを意図しています(そして、使用できないデフォルトのものは、使用するために適切に登録されていません). 例えば

class MyDocumentInteractionControllerDelegate : UIDocumentInteractionControllerDelegate { }

var dicDel = new MyDocumentInteractionControllerDelegate ();

no のように動作NullReferenceExceptionますが、もちろんDidDismissOpenInMenu何も面白いことはしません。

于 2011-11-23T13:10:53.720 に答える