programing

Bundle.main.path (forResource : ofType : inDirectory :)는 nil을 반환합니다.

nasanasas 2020. 11. 29. 11:47
반응형

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")
}

탐색 패널에서 파일을 클릭하고 오른쪽 패널 / 속성 관리자를 엽니 다.

enter image description here

대상 멤버십에 추가했는지 확인하십시오.


스위프트 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.

enter image description here

When inside a .playground file, instead press the Hide or show the Navigator button on the top-right of your Xcode window (visual impression)--> enter image description here

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:

enter image description here


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)

참고URL : https://stackoverflow.com/questions/41775563/bundle-main-pathforresourceoftypeindirectory-returns-nil

반응형