stringByAppendingPathComponent를 사용할 수 없습니다.
내 앱은 Instagram에서 사진을 공유하며, 이를 위해 먼저 임시 디렉토리에 사진을 저장합니다.
let writePath = NSTemporaryDirectory().stringByAppendingPathComponent("instagram.igo")
그것은 작용하고 있었다.Swift 1.2
, 단, 에서는 동작하지 않습니다.Swift 2.0
.
오류 메시지는 다음과 같습니다.
stringByAppendingPathComponent를 사용할 수 없습니다.NSURL에서 URLByAppendingPathComponent를 대신 사용합니다.
그 방법인 것 같다.stringByAppendingPathComponent
는 Swift 2.0에서 삭제되어 있기 때문에, 에러 메세지는 다음의 사용을 나타내고 있습니다.
let writePath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent("instagram.igo")
업데이트:
URLByAppendingPathComponent()
에 의해 대체되었습니다.appendingPathComponent()
대신 다음 작업을 수행합니다.
let writePath = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("instagram.igo")
효과가 있다NSString
다음과 같이 사용할 수 있습니다.
extension String {
func stringByAppendingPathComponent(path: String) -> String {
let nsSt = self as NSString
return nsSt.stringByAppendingPathComponent(path)
}
}
이제 이 확장자를 사용할 수 있습니다. 이 확장자를 사용하면,String
로.NSString
조작을 실시합니다.
암호는 다음과 같습니다.
let writePath = NSTemporaryDirectory().stringByAppendingPathComponent("instagram.igo")
다음은 기타 사용 방법입니다.
extension String {
var lastPathComponent: String {
return (self as NSString).lastPathComponent
}
var pathExtension: String {
return (self as NSString).pathExtension
}
var stringByDeletingLastPathComponent: String {
return (self as NSString).stringByDeletingLastPathComponent
}
var stringByDeletingPathExtension: String {
return (self as NSString).stringByDeletingPathExtension
}
var pathComponents: [String] {
return (self as NSString).pathComponents
}
func stringByAppendingPathComponent(path: String) -> String {
let nsSt = self as NSString
return nsSt.stringByAppendingPathComponent(path)
}
func stringByAppendingPathExtension(ext: String) -> String? {
let nsSt = self as NSString
return nsSt.stringByAppendingPathExtension(ext)
}
}
여기서의 참조.
swift 3.0의 경우:
extension String {
func stringByAppendingPathComponent1(path: String) -> String {
let nsSt = self as NSString
return nsSt.appendingPathComponent(path)
}
}
let writePath = NSTemporaryDirectory().stringByAppendingPathComponent(path: "instagram.igo")
extension String {
var lastPathComponent: String {
return (self as NSString).lastPathComponent
}
var pathExtension: String {
return (self as NSString).pathExtension
}
var stringByDeletingLastPathComponent: String {
return (self as NSString).deletingLastPathComponent
}
var stringByDeletingPathExtension: String {
return (self as NSString).deletingPathExtension
}
var pathComponents: [String] {
return (self as NSString).pathComponents
}
func stringByAppendingPathComponent(path: String) -> String {
let nsSt = self as NSString
return nsSt.appendingPathComponent(path)
}
func stringByAppendingPathExtension(ext: String) -> String? {
let nsSt = self as NSString
return nsSt.appendingPathExtension(ext)
}
}
스트링을 간단하게 정리하면NSString
.
let writePath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("instagram.igo")
Swift 3의 경우:
let writePath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(directoryname).path
또는 이 확장을 작성하는 것이 좋습니다.
extension String {
func appendingPathComponent(_ string: String) -> String {
return URL(fileURLWithPath: self).appendingPathComponent(string).path
}
}
사용방법:
let writePath = NSTemporaryDirectory().appendingPathComponent(directoryname)
Swift 3 솔루션:
문서 디렉토리 경로를 가져오는 함수는 다음과 같습니다.
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask)
let documentsDirectory = paths[0]
return documentsDirectory
}
사용방법:
getDocumentsDirectory.appendingPathComponent("google.com")
결과:
file:///var/folders/w1/3rcp2fvs1qv43hfsh5876s0h0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-7CF9F706-509C-4D4C-997E-AB8FE9E4A6EA/Documents/google.com
신속한 2.0의 경우
// Get the documents Directory
func documentsDirectory() -> String {
let documentsFolderPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
return documentsFolderPath
}
// Get path for a file in the directory
func fileInDocumentsDirectory(filename: String) -> String {
let writePath = (documentsDirectory() as NSString).stringByAppendingPathComponent("Mobile")
if (!NSFileManager.defaultManager().fileExistsAtPath(writePath)) {
do {
try NSFileManager.defaultManager().createDirectoryAtPath(writePath, withIntermediateDirectories: false, attributes: nil) }
catch let error as NSError {
print(error.localizedDescription);
}
}
return (writePath as NSString).stringByAppendingPathComponent(filename)
}
//# MARK: - Save Image in Doc dir
func saveImage (image: UIImage, path: String ) -> Bool{
let pngImageData = UIImagePNGRepresentation(image)
// let jpgImageData = UIImageJPEGRepresentation(image, 1.0) // if you want to save as JPEG
let result = pngImageData!.writeToFile(path, atomically: true)
print("\(result)")
print("\(path)")
return result
}
대신 URLByAppendingPathComponent()를 사용할 수 있습니다.경로 문자열을 트리밍하여 "file://" 접두사를 제거해야 합니다.
let uniqueFileName = NSUUID().UUIDString
let documentsDirectory = getDocumentsDirectoryURL()
if let path = documentsDirectory?.URLByAppendingPathComponent(uniqueFileName) {
var pathString = path.absoluteString
pathString = imagePathString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "file://"))
}
func getDocumentsDirectoryURL() -> NSURL? {
let fileManager = NSFileManager()
if let docsDirectory = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first {
return docsDirectory
}
return nil
}
다음을 수행합니다.
(("\(fileName)" as NSString).lastPathComponent as NSString).stringByDeletingPathExtension
이걸 해봤더니 문제가 해결됐어요.
이전:
let localPath = documentDirectory.URLByAppendingPathComponent(imageName)
그 후:
let localPath = (documentDirectory as NSString).appendingPathComponent(imageName)
사용하는 경우NSString
패스 방식(개요)String
URL 메서드)를 사용할 수 있으며, 확장이 훨씬 용이합니다.String
계산된 특성 또는 그 값을 반환하는 방법을 사용하여NSString
(필요한 방법을 복제하는 것)String
내선번호):
extension String
{
var ns: NSString { return self as NSString }
}
그 후:
swiftStringPath.ns.appendingPathComponent("whateva")
swiftStringPath.ns.deletingPathExtension
스위프트 4
extension String {
var lastPathComponent: String {
return (self as NSString).lastPathComponent
}
var pathExtension: String {
return (self as NSString).pathExtension
}
var stringByDeletingLastPathComponent: String {
return (self as NSString).deletingLastPathComponent
}
var stringByDeletingPathExtension: String {
return (self as NSString).deletingPathExtension
}
var pathComponents: [String] {
return (self as NSString).pathComponents
}
func stringByAppendingPathComponent(path: String) -> String {
let nsSt = self as NSString
return nsSt.appendingPathComponent(path)
}
func stringByAppendingPathExtension(ext: String) -> String? {
let nsSt = self as NSString
return nsSt.appendingPathExtension(ext)
}
}
언급URL : https://stackoverflow.com/questions/32501627/stringbyappendingpathcomponent-is-unavailable
'bestsource' 카테고리의 다른 글
지정된 커밋을 포함하는 브랜치를 나열하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
---|---|
iOS 앱 'The application cannot verify(애플리케이션을 검증할 수 없습니다)'가 한 기기에만 표시됨 (0) | 2023.04.09 |
여러 탭/시트가 있는 csv가 가능합니까? (0) | 2023.04.09 |
TextBlock에서 실행 사이의 공백을 제거하는 방법 (0) | 2023.04.09 |
Windows에서의 Python os.path.join (0) | 2023.04.09 |