尝试在iOS

时间:2017-11-27 05:03:26

标签: ios swift url

我正在尝试对网址进行编码。当我在我的包中编码文件时,代码工作正常。但是当我尝试编写写入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())

4 个答案:

答案 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)

这对我有用。在iphone 6s模拟器上运行的一个简单的单视图应用程序出现错误1022,直到我添加了“允许任意加载”。我的网址不是Iphone的本地地址,而是外部网址。谢谢 info.plist snapshot

答案 3 :(得分:0)

对于仍在Objective-C上寻求解决方案的任何人,

如果您尝试访问捆绑文件,则必须使用NSURL

fileURLWithPath

代替

URLWithString

。 通常,-1002错误提示URI无效。

对于Objective-C,下面可以是代码-

NSURL *url = [NSURL fileURLWithPath:resourceURL];

稍后,您可以在代码中使用此URI。