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 上爆炸了,因为自动释放的东西我不明白。

我有点失落。有人可以帮我理解这门课,我怎样才能让它正常工作?提前致谢。

编辑:顺便说一句,我也使用了 *.txt 文件,结果相同。

4

1 回答 1

0

它看起来像一个 MonoTouch 错误。设置UIDocumentInteractionController.Delegate(orWeakDelegate属性然后查询其值返回null(稍后将失败)。

如果我能提供解决方法,我会调查这个错误并更新这个答案(直到这个错误在 MonoTouch 的未来版本中得到正确修复)。

更新UIDocumentInteractionController已经创建了它自己的内部UIDocumentInteractionControllerDelegate,所以你不需要创建一个。Delegate 方法,就像其自身DidDismissOpenInMenu的事件一样可用UIDocumentInteractionController

删除您自己的委托(创建和设置)并使用事件,您应该没问题。

更新#2:该Delegate属性返回 null 因为默认UIDocumentInteractionControllerDelegate值不能按原样使用。它是为了继承和定制来做你想做的事情(并且不可用的默认值没有正确注册以供使用)。例如

class MyDocumentInteractionControllerDelegate : UIDocumentInteractionControllerDelegate { }

var dicDel = new MyDocumentInteractionControllerDelegate ();

起作用,就像在 no 中一样NullReferenceException,但当然DidDismissOpenInMenu不会做任何有趣的事情。

于 2011-11-23T13:10:53.720 回答