Bundle.main.path (forResource : ofType : inDirectory :)는 nil을 반환합니다.
웃거나 울지 마세요-20 년 만에 다시 코딩을 시작하고 있습니다 ...
저는 4 시간 이상을 참조를 확인하고 Bundle.main.path를 사용하여 텍스트 파일을 열 수 있도록 코드 스 니펫을 시도했습니다. 그래서 내 앱의 데이터를 읽을 수 있습니다 (다음 단계는 적절하게 구문 분석하는 것입니다).
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt")
{
do
{
let contents = try String(contentsOfFile: filepath)
print(contents)
}
catch
{
print("Contents could not be loaded.")
}
}
else
{
print("newTest.txt not found.")
}
결과 : "newTest.txt를 찾을 수 없습니다." 파일을 프로젝트로 끌어서 놓는 방법에 관계없이 Xcode 내에 파일을 만들거나 파일-> 파일 추가 ... 메뉴 항목을 사용합니다.
문제는 파일이 App Bundle로 복사되지 않는다는 것입니다. 그것을 해결하기 위해:
- 프로젝트를 클릭하십시오
- 타겟을 클릭하세요
- 빌드 단계 선택
- 번들 리소스 복사 확장
- '+'를 클릭하고 파일을 선택하십시오.
파일을 추가 할 때 메뉴 Options
에서 다시 확인 add files
하십시오. Add to targets
번들에 추가하려면 대상을 선택해야합니다.
실제로 다른 번들에있는 경우 (예 : 테스트) 다음을 사용하십시오.
guard let fileURL = Bundle(for: type(of: self)).url(forResource: fileName withExtension:"txt") else {
fatalError("File not found")
}
탐색 패널에서 파일을 클릭하고 오른쪽 패널 / 속성 관리자를 엽니 다.
스위프트 3.0
let fileNmae = "demo"
let path = Bundle.main.path(forResource: fileNmae, ofType: "txt")
do {
let content = try String(contentsOfFile:path!, encoding: String.Encoding.utf8)
print(content)
} catch {
print("nil")
}
SWift 2.0
do{
if let path = NSBundle.mainBundle().pathForResource("YOURTXTFILENAME", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
출력 :
Hello Hems
Good Morning
I m here for you dude.
Happy Coding.
아, 방금 OP와 똑같은 문제를 다루고 있다는 것을 알게되었습니다.
문제는 여기 와 여기에 제공된 솔루션 이 코드가 플레이 그라운드에서 실행될 때 작동하지 않는다는 것입니다. Options
메뉴가 필드를 add files
표시하지 않기 때문에 다르게 보입니다 Add to targets
.
When inside a .playground
file, instead press the Hide or show the Navigator
button on the top-right of your Xcode window (visual impression)-->
Then, once the Navigator folds open on the left-side of the Xcode window, simply drag & drop your file to the Resources
directory of your playground.
If your setup looks anything like the following you should be ok:
I added file.txt
to my project and it was automatically added to the Copy Bundle Files
of my project. For me, I had to remove the extension from the forResource
and it worked.
let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
Same problem, slightly different situation & solution. I'm following a tutorial that said to use the following code:
// Start the background music:
if let musicPath = Bundle.main.path(forResource:
"Sound/BackgroundMusic.m4a", ofType: nil) {
print("SHOULD HEAR MUSIC NOW")
let url = URL(fileURLWithPath: musicPath)
do {
musicPlayer = try AVAudioPlayer(contentsOf: url)
musicPlayer.numberOfLoops = -1
musicPlayer.prepareToPlay()
musicPlayer.play()
}
catch { print("Couldn't load music file") }
}
}
I had the same issue as others but none of the solutions fixed the issue. After experimenting, all I did was remove Sound from the path in the following call and everything worked:
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
It would seem that the tutorial was in error by telling me to include Sound in the path.
I think you don't want the inDirectory:
method. Try this instead:
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {
This was helpful for me: xcode - copy a folder structure into my app bundle
Mark "create folder references" option when you create assets in nested folders.
Then find path to the file like this:
let path = Bundle(for: type(of : self)).path(forResource: "some_folder_a/some_folder_b/response.json", ofType: nil)
'programing' 카테고리의 다른 글
HTML5 캔버스 회전 이미지 (0) | 2020.11.29 |
---|---|
BottomSheetDialogFragment의 상태를 확장 됨으로 설정 (0) | 2020.11.29 |
GDB로 스택 프레임을 어떻게 검사 할 수 있습니까? (0) | 2020.11.29 |
.NET Framework 4.0의 TLS 1.2 (0) | 2020.11.29 |
사용자 상태 FORCE_CHANGE_PASSWORD를 변경하는 방법은 무엇입니까? (0) | 2020.11.29 |