2

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

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

我做了一些研究,如果您从 Internet 下载文件或文件类型不是“file:// ..........”,则可能会出现此问题。我的 NSUrl 是这种格式,所以我不知道为什么会出现这个错误。

有人有什么想法吗?

谢谢

这是我调用控制器的代码:

QLPreviewController previewController= new QLPreviewController();             

previewController.DataSource=new MyQLPreviewControllerDataSource();     

this.PresentViewController(previewController,true, null);

这是我的数据源代码:

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; } 
} 

}

4

1 回答 1

3

您的 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; } 
        } 
    }                
于 2013-07-19T14:51:03.287 回答