Swift NSFileManager.defaultManager().removeItemAtPath仅在应用程序终止时删除文件

Swift NSFileManager.defaultManager().removeItemAtPath仅在应用程序终止时删除文件,swift,nsfilemanager,Swift,Nsfilemanager,因此,我使用下面的方法来处理获取、删除和保存我的应用程序的图像。当我调用removeImage时,它会成功,当我使用NSFileManager.defaultManager().fileExistsAtPath时,它会说该文件不存在。但是,当我调用getImage时,即使图像已被删除,它仍然可以抓取图像。当我重新启动应用程序时,getImage会按预期工作,直到我使用removeImage。我还尝试过将removeImage调用包装成dispatch\u async(dispatch\u get

因此,我使用下面的方法来处理获取、删除和保存我的应用程序的图像。当我调用
removeImage
时,它会成功,当我使用
NSFileManager.defaultManager().fileExistsAtPath
时,它会说该文件不存在。但是,当我调用
getImage
时,即使图像已被删除,它仍然可以抓取图像。当我重新启动应用程序时,
getImage
会按预期工作,直到我使用
removeImage
。我还尝试过将
removeImage
调用包装成
dispatch\u async(dispatch\u get\u main\u queue(),{})
,但它仍然不起作用

我的代码:

class func removeImage(user:User){
    let context = getManagedObjectContext()
    context.performBlockAndWait({
        guard let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as [String]! where paths.count > 0 else{
            return
        }

        do{
            if let dirPath = paths[0] as String!{
                let path = "\(user.id)_\(user.name).png"
                let readPath = (dirPath as NSString).stringByAppendingPathComponent(path)
                try NSFileManager.defaultManager().removeItemAtPath(readPath)
            }
        }catch{
        }
    })
}

class func saveImage(user:User,image:UIImage){
    let path = "\(user.id)_\(user.name).png"
    guard let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as [String]! where paths.count > 0 else{
        return
    }
    if let dirPath = paths[0] as String!{
        let writePath = (dirPath as NSString).stringByAppendingPathComponent(path)
        UIImagePNGRepresentation(image)!.writeToFile(writePath, atomically: true)
    }
}


class func getImage(user:User)->UIImage?{
    let path = "\(user.id)_\(user.name).png"
    guard let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as [String]! where paths.count > 0 else{
        return nil
    }
    if let dirPath = paths[0] as String!{
        let readPath = (dirPath as NSString).stringByAppendingPathComponent(path)
        return UIImage(named: readPath)
    }
    return nil
}
更新/修复!将代码更改为此,并成功:

class func removeImage(user:User){
    let manager = NSFileManager.defaultManager()
    do{
        let directoryURL = try manager.URLForDirectory(.DocumentationDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
        if #available(iOS 9.0, *) {
            let url = NSURL(fileURLWithPath: "\(user.id)_\(user.name).png", relativeToURL: directoryURL)
            try manager.removeItemAtURL(url)
        } else {
            let url = directoryURL.URLByAppendingPathComponent("\(user.id)_\(user.name).png")
            try manager.removeItemAtURL(url)
        }
    }catch{

    }
}


class func saveImage(user:User,image:UIImage){
    let manager = NSFileManager.defaultManager()
    do{
        let directoryURL = try manager.URLForDirectory(.DocumentationDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
        if #available(iOS 9.0, *) {
            let url = NSURL(fileURLWithPath: "\(user.id)_\(user.name).png", relativeToURL: directoryURL)
            UIImagePNGRepresentation(image)!.writeToURL(url, atomically: true)
        } else {
            let url = directoryURL.URLByAppendingPathComponent("\(user.id)_\(user.name).png")
            UIImagePNGRepresentation(image)!.writeToURL(url, atomically: true)
        }
    }catch{

    }
}

class func getImage(user:User)->UIImage?{
    let manager = NSFileManager.defaultManager()
    do{
        let directoryURL = try manager.URLForDirectory(.DocumentationDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
        if #available(iOS 9.0, *) {
            let url = NSURL(fileURLWithPath: "\(user.id)_\(user.name).png", relativeToURL: directoryURL)
            if let data = NSData(contentsOfURL: url){
                return UIImage(data: data)
            }
        } else {
            let url = directoryURL.URLByAppendingPathComponent("\(user.id)_\(user.name).png")
            if let data = NSData(contentsOfURL: url){
                return UIImage(data: data)
            }
        }
    }catch{

    }
    return nil
}

我将使用NSURL重新开始,而不是强制转换为NSString以使用路径。好的,我将检查它。仍然是NSURL的相同问题,实际上解决了它!不确定为什么使用NSURL会起作用,而路径不会起作用…我将使用NSURL重新开始,而不是强制转换为NSString来使用路径。好的,我会检查它。仍然与NSURL相同的问题实际上解决了它!不知道为什么使用NSURL会起作用,但是路径不会。。。