Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CGPDFDictionaryGetString函数无参数异常_Ios_Objective C_Swift_File_Pdf - Fatal编程技术网

Ios CGPDFDictionaryGetString函数无参数异常

Ios CGPDFDictionaryGetString函数无参数异常,ios,objective-c,swift,file,pdf,Ios,Objective C,Swift,File,Pdf,我发现无法在pdf中获取内容类型。我在试图从字典中读取内容类型的地方构建了代码。我发现type的键是type。但是,我得到一个错误: 致命错误:在展开可选值时意外发现nil 这是我的密码: pdfDoc = CGPDFDocumentCreateWithURL(url) if (pdfDoc != nil) { let pdfCatalog=CGPDFDocumentGetCatalog(pdfDoc) var uriStringRef: UnsafeMutablePointe

我发现无法在pdf中获取内容类型。我在试图从字典中读取内容类型的地方构建了代码。我发现type的键是type。但是,我得到一个错误:

致命错误:在展开可选值时意外发现nil

这是我的密码:

pdfDoc = CGPDFDocumentCreateWithURL(url)

if (pdfDoc != nil) {
    let pdfCatalog=CGPDFDocumentGetCatalog(pdfDoc)
    var uriStringRef: UnsafeMutablePointer< CGPDFStringRef>!

    if (CGPDFDictionaryGetString(pdfCatalog, "Type", uriStringRef)) { //error
        print(uriStringRef)

    }
}
pdfDoc=CGPDFDocumentCreateWithURL(url)
如果(pdfDoc!=零){
让pdfCatalog=CGPDFDocumentGetCatalog(pdfDoc)
var uriStringRef:unsafemeutablepointer!
if(CGPDFDictionaryGetString(pdfCatalog,“Type”,uriStringRef)){//error
打印(uriStringRef)
}
}
唯一的nil参数是
uriStringRef
。但是,在传递到
CGPDFDictionaryGetString
之前,我不应该设置任何值,根据,这应该得到基于键
“Type”
的字符串返回值。我说得对吗


如何解决此问题?

您正在向
CGPDFDictionaryGetString
方法传递一个未初始化的指针,这是不安全的,因为您无法知道正在调用的方法在写入指针之前是否尝试从指针读取

来自Swift博客:

指针作为输入/输出参数

C和Objective-C不支持多个返回值,因此CocoaAPI经常使用指针作为在函数中传递额外数据的方式。Swift允许将指针参数视为inout参数,因此可以使用相同的
&
语法将对
var
的引用作为指针参数传递

为了安全起见,Swift要求在使用
传递变量之前对变量进行初始化。这是因为它无法知道被调用的方法在写入指针之前是否尝试读取指针

因此,初始化
CGPDFStringRef
“指针”,如下所示:

var uriStringRef = CGPDFStringRef.init()
并使用inout语法将其传递给方法:

CGPDFDictionaryGetString(pdfCatalog, "Type", &uriStringRef)