2017-11-27 11 views
0

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()) 
+0

あなたのURLは無効です。 'EncodeURL'メソッドに渡すURLをどのように作成するかを示します。 – rmaddy

+0

あなたの更新は 'EncodeURL'に渡す' URL'をどのように作成するのかを示していません。 – rmaddy

+0

が追加されました。しかし、contentsOfDirectoryを使ってコンテンツを取得しようとしたとき、実際にはうまくいきました。 –

答えて

1

URLは正しく作成されていません。 string引数にパスを渡しています。 URL(fileURLWithPath:)イニシャライザを使用する必要があります。

let url = URL(fileURLWithPath: path) 

指定した文字列がURLスキームで始まる有効なURLである場合にのみURL(string:)初期化子を使用しています。

+0

これは私のために働いた!どうもありがとうございました。 –

関連する問題