2017-03-01 4 views
0

파일에서 배열 요소로 파일의 텍스트를로드하려면 아이폰 앱에 배열 요소 당 파일 한 줄을 넣으려고합니다.iOS 파일에서 읽는 중

맹렬한 텍스트를 사용하여 입력 파일을 텍스트 파일로 만들었습니다. 나는 프로젝트 디렉토리의 동일한 위치에있는 폴더에 xCode로 파일 (프로젝트 디렉토리의 폴더 안에 위치 함)을 드래그했습니다.

번들로 추가 (폴더를 복사하고 .bundle 확장명으로 이름 변경)하여 사용하지 않으려했습니다. 현재, 내 응용 프로그램은 2 개 장소에 파일을 가지고 있습니다 (분명히 불필요한 버전을 삭제할 계획입니다. 그러나 이것이 어떻게 작동 할 지 모르겠습니다). 나는 내 파일을 읽고, 배열로 그 내용을 조립하고자하는 기능을 작성했습니다

는 : 약자로

func readFromFile(filename: String) -> [String]? { 

    guard let theFile = Bundle.main.path(forResource: fileName, ofType: "txt") else {   
     return nil // ALWAYS returns nil here: Seems 'filename' can't be found????? 
    } 

    do { // Extract the file contents, and return them as a split string array 
     let fileContents = try String(contentsOfFile: theFile) 
     return fileContents.components(separatedBy: "\n") 

    } catch _ as NSError { 
     return nil 
    } 
} 

, 함수는 항상 코드에서 주석 위치에 전무를 반환합니다.

저는 이것을 ~ 6 시간 (그리고 StackOverflow, Google 등에서 찾을 수있는 모든 제안을 시도했습니다) 노력하고 있습니다. 다양한 버전의 스위프트와 복잡한 것의 차이점에 대해 점점 더 혼란스러워지고 있습니다. iOS 개발. 어디서나 일관된 답변을 찾을 수없는 것 같습니다. 사과 설명서를 확인했지만 초보자 수준에서 이해할 수있는 예제 코드가없는 너무 높은 수준입니다.

".txt"확장명을 가진 파일의 이름을 지정했지만 그 중 하나만 도움이되지 않았습니다.

답변

2

forResource: "alert01", ofType: "txt"으로 지정하려면 파일의 이름을 alert01.txt으로 지정해야합니다.

번들에서로드하는 기능이 작동하지 않습니다. 파일은 첫 번째 항목에 표시된대로 프로젝트의 일부 여야합니다.

그러나 폴더 참조를 만들었 기 때문에 코드가 작동하지 않습니다. 즉, 폴더 PanicAlertFiles이 모든 내용과 함께 번들로 복사되고 있음을 의미합니다. 파일을 검색하려면 코드가 해당 폴더로 이동해야합니다. path(forResource:ofType:inDirectory:)을 사용하거나 (명시 적으로 파일 이름을 코딩하지 않으려는 경우) 폴더를 가져온 다음 FileManager를 사용하여 내용을 검사하십시오.

관련 문제