从服务器的目标C或斯威夫特下载文件 [英] Downloading Files from server Objective C or Swift

查看:204
本文介绍了从服务器的目标C或斯威夫特下载文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何从我的服务器到用户的手机下载音频文件的应用程序中使用?当我去的网站链接,JSON code出现这样的

[{名:让党,路径:HTTP:\\ / \\ / domain.us \\ / \\ / \\ /音频\\ / \\ /让Party.wav},
{名:让你知道,路径:HTTP:\\ / \\ / domain.us \\ / \\ / \\ /音频\\ / \\ /让你Know.wav},
{名:妈呀,路径:HTTP:\\ / \\ / domain.us \\ / \\ / \\ /音频\\ / \\ / OMG.wav}]

我试图得到JSON和它转化斯威夫特,但坠毁我的应用程序。但是,当我把博客JSON,它完美的作品,没有崩溃。我怎样才能做到这一点无论是在雨燕或Objective-C?

编辑:我现在得到一个错误信息

当前code:

 让urlPath =htt​​p://www.domain.us/        让URL = NSURL(字符串:urlPath)        让会话= NSURLSession.sharedSession()        让任务= session.dataTaskWithURL(URL,completionHandler:{数据,回应,误差 - >无效的            如果错误!= {为零
                的println(错误)
            }其他{
                让jsonResult = NSJSONSerialization.JSONObjectWithData(数据,选项:NSJSONReadingOptions.MutableContainers,错误:无)作为NSDictionary的
                的println(jsonResult)
            }        })        task.resume()
    }

错误消息:

  2014年11月12日20:07:23.652 JSON实践[6073:284290] CFNetwork的SSLHandshake失败(-9847)
2014年11月12日20:07:23.874 JSON实践[6073:284290] CFNetwork的SSLHandshake失败(-9847)
2014年11月12日20:07:24.054 JSON实践[6073:284290] CFNetwork的SSLHandshake失败(-9847)
2014年11月12日20:07:24.055 JSON实践[6073:284290] NSURLConnection的/ CFURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9847)
错误域= NSURLErrorDomain code = -1200的操作无法完成(NSURLErrorDomain错误-1200)。的UserInfo = {0x7fc0ba656020 = NSErrorFailingURLStringKey HTTPS://www.domain.us/,NSErrorFailingURLKey = HTTPS:/ /www.makemeip.us/,_kCFStreamErrorDomainKey = 3,_kCFStreamError codeKey = -9847,NSUnderlyingError = 0x7fc0ba52ebb0该操作无法完成。(kCFErrorDomainCFNetwork错误-1200。)}


解决方案

  //
// ViewController.swift
//的Test2
//
//创建者ADM在14年11月14日。
//版权所有(C)2014年Dabus.Tv。版权所有。
//进口的UIKit
进口基金会
进口AVFoundation一流的ViewController:UIViewController的{
    @IBOutlet弱VAR strFiles:UITextView的!
    覆盖FUNC viewDidLoad中(){
        super.viewDidLoad()
        //装载视图,通常从笔尖后做任何额外的设置。        如果让URL = NSURL(字符串:http://www.anyurl.com/){
            如果让loadedString =字符串(contentsOfURL:URL){
                //文件的字符串是成功地加载
                //添加文件路径+ / +文件名+扩展名
                让localUrl =(NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,真)[0]为String)+/+数据+.db的// URL文件为String(本地存储路径)
                //检查本地文件路径URL
                如果让checkLocalUrl = NSURL(fileURLWithPath:localUrl){
                    让savedFile = loadedString.writeToURL(checkLocalUrl,原子:真的,编码:NSUTF8StringEncoding,错误:无)//写给url savedFile会真的还是假的
                    如果savedFile {
                        //做什么
                        self.strFiles.text =\\(self.strFiles.text)路径:\\(checkLocalUrl)\\ n
                        self.strFiles.text =\\(self.strFiles.text)文件被成功地保存\\ n
                    }                    //让我们创建与您的字符串的ARRAY
                    变种arrayLines =
                    如果让myArrayParsed = loadedString.JSONParseArray(){
                        为ELEM:AnyObject在myArrayParsed {
                            让名= ELEM [名称]为String
                            让PATH = ELEM [路径]为String
                            arrayLines =姓名:\\(名称),路径:\\(路径)                            self.strFiles.text =\\(self.strFiles.text)\\(arrayLines)\\ n
                        }
                    }其他{
                        //无法解析数组                    }                }其他{
                    //不能检查本地网址
                }
            }其他{
                //无法加载从URL字符串内容
            }
        }其他{
            // 无效的网址
        }
    }
    覆盖FUNC didReceiveMemoryWarning(){
        super.didReceiveMemoryWarning()
        可以重新创建任何资源的处置//。
    }
}
扩展字符串{
    FUNC JSONParseArray() - > [AnyObject] {
        如果让数据= self.dataUsingEncoding(NSUTF8StringEncoding){
            如果让阵列= NSJSONSerialization.JSONObjectWithData(数据,选项:NSJSONReadingOptions(0),错误:无)作为? [AnyObject] {
                返回的数组
            }
        }其他{
            零回报
        }
        返回[AnyObject]()
    }
}

How can I download audio files from my server to the user's phone to be used in the app? When I go to the website link, JSON code comes up like this

[{"name":"Lets Party","path":"http:\/\/domain.us\/\/\/audios\/\/Lets Party.wav"},
{"name":"Let You Know","path":"http:\/\/domain.us\/\/\/audios\/\/Let You Know.wav"},
{"name":"OMG","path":"http:\/\/domain.us\/\/\/audios\/\/OMG.wav"}]

I tried getting the JSON and converting it in Swift, but that crashed my app. But when I put a blog JSON, it works perfectly, no crash. How can I do this in either Swift or Objective-C?

EDIT: I get an error message now.

Current code:

        let urlPath = "http://www.domain.us/"

        let url = NSURL(string: urlPath)

        let session = NSURLSession.sharedSession()

        let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in

            if error != nil {
                println(error)
            } else {
                let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
                println(jsonResult)
            }

        })

        task.resume()
    }

Error Message:

2014-11-12 20:07:23.652 JSON Practice[6073:284290] CFNetwork SSLHandshake failed (-9847)
2014-11-12 20:07:23.874 JSON Practice[6073:284290] CFNetwork SSLHandshake failed (-9847)
2014-11-12 20:07:24.054 JSON Practice[6073:284290] CFNetwork SSLHandshake failed (-9847)
2014-11-12 20:07:24.055 JSON Practice[6073:284290] NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9847)
Error Domain=NSURLErrorDomain Code=-1200 "The operation couldn’t be completed. (NSURLErrorDomain error -1200.)" UserInfo=0x7fc0ba656020 {NSErrorFailingURLStringKey=https://www.domain.us/, NSErrorFailingURLKey=https://www.makemeip.us/, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9847, NSUnderlyingError=0x7fc0ba52ebb0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1200.)"}

解决方案

//
//  ViewController.swift
//  Test2
//
//  Created by adm on 11/14/14.
//  Copyright (c) 2014 Dabus.Tv. All rights reserved.
//

import UIKit
import Foundation
import AVFoundation

class ViewController: UIViewController {
    @IBOutlet weak var strFiles: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        if let url = NSURL(string: "http://www.anyurl.com/") {
            if let loadedString = String(contentsOfURL: url) {
                // file string was sucessfully loaded
                // add the file path + / + filename + extension
                let localUrl = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String) + "/" + "data" + ".db"  // Documents URL as String (local storage path)
                // check local file path url
                if let checkLocalUrl = NSURL(fileURLWithPath: localUrl) {
                    let savedFile = loadedString.writeToURL(checkLocalUrl, atomically: true, encoding: NSUTF8StringEncoding, error: nil) // write to url savedFile will true or false
                    if savedFile {
                        // do whatever
                        self.strFiles.text = "\(self.strFiles.text)path: \(checkLocalUrl)\n"
                        self.strFiles.text = "\(self.strFiles.text)file was sucessfully saved\n"
                    }

                    // lets create an ARRAY with your string
                    var arrayLines = ""
                    if let myArrayParsed = loadedString.JSONParseArray() {
                        for elem:AnyObject in myArrayParsed {
                            let name = elem["name"] as String
                            let path = elem["path"] as String
                            arrayLines = "Name: \(name), Path: \(path)"

                            self.strFiles.text = "\(self.strFiles.text)\(arrayLines)\n"
                        }
                    } else {
                        // could not parse array

                    }

                } else {
                    // could not check local url
                }
            } else {
                // could not load string contents from url
            }
        } else {
            // invalid url
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
extension String {
    func JSONParseArray() -> [AnyObject]? {
        if let data = self.dataUsingEncoding(NSUTF8StringEncoding) {
            if let array = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: nil)  as? [AnyObject] {
                return array
            }
        } else {
            return nil
        }
        return [AnyObject]()
    }
}

这篇关于从服务器的目标C或斯威夫特下载文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆