URLをエンコードしようとしました。コードは、バンドル内のファイルをエンコードするときに問題なく動作します。しかし、ドキュメントとキャッシュに書き込まれたファイルをエンコードしようとすると、プログラムはエンコードに失敗します。ここでiOSでURLをエンコードしようとすると、NSURLConnectionがエラーコード-1002で終了しました
は私のエンコーダです:
private class func EncodeURL(_ url:URL,encoding:UInt) ->String {
do{
return try NSString(contentsOf: url, encoding: encoding) as String
}catch{}
return ""
}
私は、次の3つ使用しています:
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は
url = URL(string:getCachePath()+bookname+".txt")
は
EncodeURL(url:URL,encoding:UInt)
にこれを渡します
/ユーザ/箒(ほうき)/ライブラリ/開発/ CoreSimulator /デバイス/ 67C921C8-18A3-4A3F-81FF-C3AF04E88049/data/Containers/Data/Application/85633861-90E6-4DB8-95B0-86C359C74C6B/Documents // Users/houki/Library/Developer/CoreSimulator/De悪徳/ 67C921C8-18A3-4A3F-81FF-C3AF04E88049 /データ/コンテナ/データ/アプリケーション/ 85633861-90E6-4DB8-95B0-86C359C74C6B/1511757881.83107_bigbrother.txt
これは奇妙に見えるでしょうか?私はシミュレータでそれをテストしています。
実際には、パスを介してファイルを読み込もうとしたときにうまくいきました。次のコードが動作しています。
let contentsofPath = try FileManager.default.contentsOfDirectory(atPath: getCachePath())
あなたのURLは無効です。 'EncodeURL'メソッドに渡すURLをどのように作成するかを示します。 – rmaddy
あなたの更新は 'EncodeURL'に渡す' URL'をどのように作成するのかを示していません。 – rmaddy
が追加されました。しかし、contentsOfDirectoryを使ってコンテンツを取得しようとしたとき、実際にはうまくいきました。 –