无法将类型 'inout NSNumber?' 的值转换为预期的参数类型 'AutoreleasingUnsafeMutablePointer<AnyObject?>' 错误
Cannot convert value of type 'inout NSNumber?' to expected argument type 'AutoreleasingUnsafeMutablePointer<AnyObject?>' error
我有此脚本用于检查从 iCloud
下载的 * 文件是否可用。但不幸的是,我在某些代码行中遇到了错误Cannot convert value of type 'inout NSNumber?' to expected argument type 'AutoreleasingUnsafeMutablePointer<AnyObject?>'
。请帮助我解决这个问题,因为这是我第一次创建代码来检查下载的文件是否在icloud中可用。
请参考下图作为错误示例,下面还有代码供您参考。希望你能帮助我。谢谢。
Sample screenshot of error
//-------------------------------------------------------------------
// ダウンロードできるか判定 Judgment or can be downloaded
//-------------------------------------------------------------------
func downloadFileIfNotAvailable(_ file: URL?) -> Bool {
var isIniCloud: NSNumber? = nil
do {
try (file as NSURL?)?.getResourceValue(&isIniCloud, forKey: .isUbiquitousItemKey)
if try (file as NSURL?)?.getResourceValue(&isIniCloud, forKey: .isUbiquitousItemKey) != nil {
if isIniCloud?.boolValue ?? false {
var isDownloaded: NSNumber? = nil
if try (file as NSURL?)?.getResourceValue(&isDownloaded, forKey: .ubiquitousItemIsDownloadedKey) != nil {
if isDownloaded?.boolValue ?? false {
return true
}
performSelector(inBackground: #selector(startDownLoad(_:)), with: file)
return false
}
}
}
} catch {
}
return true
}
您似乎复制并粘贴了一些非常旧的代码。另外,这是Swift,不是Objective-C。不要使用 NSURL 或 getResourceValue
。您的代码应该更像这样:
if let rv = try file?.resourceValues(forKeys: [.isUbiquitousItemKey]) {
if let isInCloud = rv.isUbiquitousItem {
// and so on
}
}
等等;相同的模式适用于其他键。请注意,也没有 .ubiquitousItemIsDownloadKey
。你可以这样压缩:
if let rv = try file?.resourceValues(
forKeys: [.isUbiquitousItemKey, .ubiquitousItemDownloadingStatusKey]) {
if let isInCloud = rv.isUbiquitousItem {
if let status = rv.ubiquitousItemDownloadingStatus {
if status == .downloaded {
}
}
}
}
我有此脚本用于检查从 iCloud
下载的 * 文件是否可用。但不幸的是,我在某些代码行中遇到了错误Cannot convert value of type 'inout NSNumber?' to expected argument type 'AutoreleasingUnsafeMutablePointer<AnyObject?>'
。请帮助我解决这个问题,因为这是我第一次创建代码来检查下载的文件是否在icloud中可用。
请参考下图作为错误示例,下面还有代码供您参考。希望你能帮助我。谢谢。
Sample screenshot of error
//-------------------------------------------------------------------
// ダウンロードできるか判定 Judgment or can be downloaded
//-------------------------------------------------------------------
func downloadFileIfNotAvailable(_ file: URL?) -> Bool {
var isIniCloud: NSNumber? = nil
do {
try (file as NSURL?)?.getResourceValue(&isIniCloud, forKey: .isUbiquitousItemKey)
if try (file as NSURL?)?.getResourceValue(&isIniCloud, forKey: .isUbiquitousItemKey) != nil {
if isIniCloud?.boolValue ?? false {
var isDownloaded: NSNumber? = nil
if try (file as NSURL?)?.getResourceValue(&isDownloaded, forKey: .ubiquitousItemIsDownloadedKey) != nil {
if isDownloaded?.boolValue ?? false {
return true
}
performSelector(inBackground: #selector(startDownLoad(_:)), with: file)
return false
}
}
}
} catch {
}
return true
}
您似乎复制并粘贴了一些非常旧的代码。另外,这是Swift,不是Objective-C。不要使用 NSURL 或 getResourceValue
。您的代码应该更像这样:
if let rv = try file?.resourceValues(forKeys: [.isUbiquitousItemKey]) {
if let isInCloud = rv.isUbiquitousItem {
// and so on
}
}
等等;相同的模式适用于其他键。请注意,也没有 .ubiquitousItemIsDownloadKey
。你可以这样压缩:
if let rv = try file?.resourceValues(
forKeys: [.isUbiquitousItemKey, .ubiquitousItemDownloadingStatusKey]) {
if let isInCloud = rv.isUbiquitousItem {
if let status = rv.ubiquitousItemDownloadingStatus {
if status == .downloaded {
}
}
}
}