加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – NSFileManager.defaultManager().createFileAtPath()返回

发布时间:2020-12-14 17:34:04 所属栏目:百科 来源:网络整理
导读:在一千个print()语句之后,我终于找到了问题!但是,我不确定如何解决它.问题在于: NSFileManager.defaultManager().createFileAtPath(savePath,contents:data,attributes:nil) 根据Apple开发人员指南,如果操作成功或项目已存在,则此行代码返回true,否则返
在一千个print()语句之后,我终于找到了问题!但是,我不确定如何解决它.问题在于:

NSFileManager.defaultManager().createFileAtPath(savePath,contents:data,attributes:nil)

根据Apple开发人员指南,如果操作成功或项目已存在,则此行代码返回true,否则返回false.

这行返回false,我不确定为什么,因为行前面的代码似乎没问题.有人对如何解决这个bug有任何建议吗?

其余的代码在这里:

//
//  ViewController.swift
//  Downloading An Image From The Web
//
//  Created by Jae Hyun Kim on 9/6/15.
//  Copyright ? 2015 Jae Hyun Kim. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var image: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let url = NSURL(string: "http://7-themes.com/data_images/out/3/6776407-beautiful-scenery-pictures.jpg")
        let urlRequest = NSURLRequest(URL: url!)

        let task = NSURLSession.sharedSession().dataTaskWithRequest(urlRequest,completionHandler: { (data,response,error) -> Void in
            if error != nil {
                print(error)
            }
            else {
                if let bach = UIImage(data: data!) {
                    //self.image.image = bach
                    let documentsDirectory:String?
                    let paths:[AnyObject] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.PicturesDirectory,NSSearchPathDomainMask.UserDomainMask,true)
                    print(paths)
                    if paths.count > 0 {
                        documentsDirectory = paths[0] as? String
                        let savePath = documentsDirectory! + "/bach.jpg"

                        print(NSFileManager.defaultManager().createFileAtPath(savePath,contents: data,attributes: nil))

                        if NSFileManager.defaultManager().fileExistsAtPath(savePath) {
                            print("file available")
                        }
                        else {
                            print("file not available")
                        }



                        self.image.image = UIImage(contentsOfFile: savePath)
                    }
                }
            }
        })
        task!.resume()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

解决方法

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var image: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()

        let url = NSURL(string: "http://7-themes.com/data_images/out/3/6776407-beautiful-scenery-pictures.jpg")!
        let urlRequest = NSURLRequest(URL: url)

        let task = NSURLSession.sharedSession().dataTaskWithRequest(urlRequest,error) -> Void in


            // you should always do it from the main queue otherwise you will experience a big delay when trying to display your image
            dispatch_async(dispatch_get_main_queue()) {
                // unwrap your data
                if let data = data {
                    print(data.length)
                    // get your caches directory URL
                    let cachesDirectory = try! NSFileManager().URLForDirectory(.CachesDirectory,inDomain: .UserDomainMask,appropriateForURL: nil,create: true)
                    // create your local file url by appending your url last path component
                    let fileUrl = cachesDirectory.URLByAppendingPathComponent(url.lastPathComponent!)
                    // save downloaded data to disk
                    if data.writeToURL(fileUrl,atomically: true) {
                        print(true)
                        // load your saved image from disk
                        self.image.image = UIImage(contentsOfFile: fileUrl.path!)
                    }

                }
            }

        })
        task.resume()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

请注意,您需要编辑您的plist,如下所示:

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读