Monotouch - QLPreviewController问题

时间:2013-03-06 21:05:03

标签: ios mono xamarin.ios

我正在尝试使用QLPreviewController查看PDF文件并发送它,但是在预览PDF文档后我的操作按钮出现问题。

当我按下操作按钮(在右上角)时,应用程序崩溃,我得到:“未处理的托管异常:抛出Objective-C异常。名称:NSInternalInconsistencyException原因:UIDocumentInteractionController:无效方案(null)。只有文件方案是支持。(MonoTouch.Foundation.MonoTouchException)“

我做了一些研究,如果您从互联网上下载文件或文件类型不是“file:// ..........”,则会发生此问题。 我的NSUrl是那种格式,所以我不知道为什么我有这个错误。

有人有任何想法吗?

由于

以下是我调用Controller的代码:

QLPreviewController previewController= new QLPreviewController();             

previewController.DataSource=new MyQLPreviewControllerDataSource();     

this.PresentViewController(previewController,true, null);

这是我的DataSource代码:

public class MyQLPreviewControllerDataSource : QLPreviewControllerDataSource { public     override int PreviewItemCount (QLPreviewController controller) {

    return 1;
}

public override QLPreviewItem GetPreviewItem (QLPreviewController controller, int index)
{

    string fileName = @"example.pdf";
    var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
    var library = Path.Combine (documents,fileName);
    NSUrl url = NSUrl.FromFilename (library);
    return new QlItem ("Title", url);
}
}

这是我的项目代码:

public class QlItem : QLPreviewItem { string _title; Uri _uri;

public QlItem (string title, Uri uri) 
{ 
    this._title = title; 
    this._uri = uri; 
} 

public override string ItemTitle { 
    get { return _title; } 
} 

public override NSUrl ItemUrl { 
    get { return _uri; } 
} 

}

1 个答案:

答案 0 :(得分:2)

您的QlItem类将原始NSUrl转换为Uri,然后再将其转换回NSUrl,并且在此过程中会丢失一些东西。

看起来应该更像:

    public class QlItem : QLPreviewItem 
    { 
        string title; 
        NSUrl uri; 

        public QlItem(string title, NSUrl uri) 
        { 
            this.title = title; 
            this.uri = uri; 
        } 

        public override string ItemTitle { 
            get { return title; } 
        } 

        public override NSUrl ItemUrl { 
            get { return uri; } 
        } 
    }