我正在尝试对网址进行编码。当我在我的包中编码文件时,代码工作正常。但是当我尝试编写写入Documents and Cache的文件时,程序无法编码。
这是我的编码器:
private class func EncodeURL(_ url:URL,encoding:UInt) ->String {
do{
return try NSString(contentsOf: url, encoding: encoding) as String
}catch{}
return ""
}
我正在使用以下三个:
content = EncodeURL(url, encoding: String.Encoding.utf8.rawValue)
content = EncodeURL(url, encoding: 0x80000632)
content = EncodeURL(url, encoding: 0x80000631)
并且它们都不起作用。
这是我用来生成文件的代码。我把它们放在文件夹中。
func writeFile(fileName:String,data:NSData)->Bool{
guard let filePath = createFilePath(fileName: fileName) else{
return false
}
return data.write(toFile:filePath,atomically:true)
}
func createFilePath(fileName:String)->String?{
let dir = getCachePath()
if(!dirExists(dir: dir) && !createDir(dir: dir)){
return nil
}
let filePath = dir + fileName
if(fileExists(path: filePath)){
do{
try getFileManager().removeItem(atPath: filePath)
}catch{
return nil
}
}
return filePath
}
func getCachePath()->String{
var cacheDir = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, .userDomainMask, true).first!
if(!cacheDir.hasSuffix("/")){
cacheDir += "/"
}
cacheDir += CACHEPATH + "/" //CACHEPATH is just NSHomeDirectory()
return cacheDir
}
writeFile(fileName: String(timeInterval)+"_"+somestring+".txt", data: data! as NSData)
以上是我生成文件的方式。
我如何通过网址:
url = URL(string:getCachePath()+bookname+".txt")
将此传递给
EncodeURL(url:URL,encoding:UInt)
我的网址是:
/用户/ houki /库/开发商/ CoreSimulator /设备/ 67C921C8-18A3-4A3F-81FF-C3AF04E88049 /数据/容器/数据/应用/ 85633861-90E6-4DB8-95B0-86C359C74C6B /文件//用户/ houki /Library/Developer/CoreSimulator/Devices/67C921C8-18A3-4A3F-81FF-C3AF04E88049/data/Containers/Data/Application/85633861-90E6-4DB8-95B0-86C359C74C6B/1511757881.83107_bigbrother.txt
这看起来很奇怪吗?我在模拟器上测试它。
但实际上,当我尝试通过路径读取文件时,这工作正常。以下代码正在运行。
let contentsofPath = try FileManager.default.contentsOfDirectory(atPath: getCachePath())
答案 0 :(得分:9)
您没有正确创建URL
。您正在传递string
参数的路径。您需要使用URL(fileURLWithPath:)
初始值设定项。
let url = URL(fileURLWithPath: path)
如果您传递的字符串是以URL方案开头的有效网址,则仅使用URL(string:)
初始值设定项。
答案 1 :(得分:0)
也可能是因为您的网址不是https
将此添加到您的plist中
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
或获取http
网址的安全版本
答案 2 :(得分:0)
答案 3 :(得分:0)
对于仍在Objective-C上寻求解决方案的任何人,
如果您尝试访问捆绑文件,则必须使用NSURL
fileURLWithPath
代替
URLWithString
。 通常,-1002错误提示URI无效。
对于Objective-C,下面可以是代码-
NSURL *url = [NSURL fileURLWithPath:resourceURL];
稍后,您可以在代码中使用此URI。