質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1568閲覧

Swift4 csvファイルを読み込む際のエラーに関して

kazukiikegami

総合スコア19

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/11/01 06:49

編集2018/11/01 07:12

前提・実現したいこと

Swift4も用いてパズル系のゲーム開発をしています。
パズルの譜面のデータをcsvファイルから読み込んでいます。
csvファイルの中身は
1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,4,5
2,3,4,4,4,4,4,5,5,5,5,5,5,5,7,7,7,7,7,7
のようになっていて
数字1つが1つのマスを示しています。
また改行されると次のステージのデータとなっています。

読み込みのコードは以下の通りです。

swift4

1if let csvPath = Bundle.main.path(forResource: "csvファイル名", ofType: "csv") { 2 do { 3 let csvStr = try String(contentsOfFile:csvPath, encoding:String.Encoding.utf8) 4 //改行コードが"\r"で行なわれている場合は"\n"に変更する 5 let lineChange = csvStr.replacingOccurrences(of: "\r", with: "\n") 6 //"\n"の改行コードで区切って、配列csvArrに格納する 7 let csvArr = lineChange.split(separator: "\n").map(String.init) 8     //該当のステージデータをdataDetailに格納 9 let dataDetail = csvArr[selectstage-1].components(separatedBy: ",") 10     //dataDetailの要素数 11 elementnumer = dataDetail.count 12     //√dataDetail 13 GraphNumber = Int(sqrt(Double(elementnumer))) 14     //配列の初期化 15 nowhintdataarry = Array(repeating:0, count:elementnumer) 16 drawarry = Array(repeating:0, count:elementnumer) 17     //初期化したdrawarry配列に読み込んだデータ(dataDetail)を格納 18 for i in 0..<elementnumer{ 19 drawarry[i] = (Int(dataDetail[i]))! 20 } 21 } catch let error as NSError { 22     //エラー時 23 print(error.localizedDescription) 24 } 25 }

このようになっています。
エラーは毎回出るのではなく
連続で20ステージ程プレイすると
読み込む際に上記のエラー時に表示される文字が出力され、下記のエラーメッセージが出力されアプリが落ちてしまいます。

1からプレイし始めると21か22、23ステージ目で読み込みエラーがおきますが
連続プレイではなく21ステージを選択してプレイするとエラーはおきないです。
また元々のデータ自体も問題ないです。

下記のエラーメッセージの意味とエラーの原因をわかるかた教えていただけるとありがたいです。
よろしくお願いします。

エラーメッセージ

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/containers/Bundle/Application/...(省略)/アプリ名.app> (loaded)' with name 'V8Q-wZ-9hw-view-iIf-VD-1OL' and directory 'Main.storyboardc'' *** First throw call stack: (0x1c3f92f2c 0x1c3190284 0x1c3e9534c 0x1f17baa60 0x1f1538e0c 0x1f15397f8 0x1f1539ad8 0x1f153a24c 0x1f1467828 0x1f145b61c 0x1f154be3c 0x1f154ef3c 0x1f1fe21c4 0x1f154ee94 0x1f154f510 0x1f154ed74 0x1f154f0f8 0x1f1cc3d64 0x1f1cc84b4 0x1f1cc8e50 0x1f1cc8cf4 0x1f153c810 0x105113254 0x105113bf0 0x1f172673c 0x1f172f038 0x1f172c818 0x1f172bc98 0x1f171ec6c 0x1f171e7d4 0x1f171e594 0x1f1b688c4 0x1f1b46d80 0x1f1c182a4 0x1f1c1ad5c 0x1f1c1b0d4 0x1f1c1369c 0x1c3f216a0 0x1c3f2161c 0x1c3f20ed4 0x1c3f1bbb4 0x1c3f1b494 0x1c61cebe8 0x1f1b2a68c 0x1050f959c 0x1c39d1050) libc++abi.dylib: terminating with uncaught exception of type NSException

###追記
読み込む際に上記のエラー時に表示される出力される文字は

error...

です。

またMain.storyboardcについては心当たりまありません。
プロジェクト内のファイルもMain.storyboardです。

よろしくお願いします。

###バージョン
MacOS 10.14.1
Xcode 10.1
Swift 4.2.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/11/01 07:02

エラーメッセージの中に 'Main.storyboardc' という文字列がありますが、何か心当たりはないでしょうか?( .storyboard ではなく .storyboardc になっているのが気になります)
fuzzball

2018/11/01 07:04

「読み込む際に上記のエラー時に表示される文字が出力され」の出力も書いて下さい。
fuzzball

2018/11/01 07:15

追記していただいたエラーメッセージが print(error.localizedDescription) の出力であることは、どうやって確認しましたか?
fuzzball

2018/11/01 07:20

storyboardc については分かりました。cが付いていることは問題無さそうです。一度クリーンしてみて下さい。
kazukiikegami

2018/11/01 07:22

print(error.localizedDescription)が書いてあるエラー処理の中にprint("www")などの出力コードを書いた場合出力されたからです。
fuzzball

2018/11/01 07:24

error.description だと何が出力されるでしょうか?
kazukiikegami

2018/11/01 07:34 編集

Error Domain=NSCocoaErrorDomain Code=256 "(null)" UserInfo={NSFilePath=/var/containers/Bundle/Application/312CD3CC-32B2-4B09-BC8A-F7DF7505D559/brain15.app/compdata.csv, NSUnderlyingError=0x282522b50 {Error Domain=NSPOSIXErrorDomain Code=24 "Too many open files"}} The operation couldn\U2019t be completed. (NSCocoaErrorDomain error 256.) と出力されました。
guest

回答2

0

ベストアンサー

1からプレイし始めると21か22、23ステージ目で読み込みエラーがおきますが

連続プレイではなく21ステージを選択してプレイするとエラーはおきないです。

とのことから、ステージ(画面View)を戻らずに開いたまま次に遷移しているからでは?
ステージが多くなることを想定されるのであれば、画面遷移を実際にするのではなく、
見た目だけ遷移したようにするなど工夫が必要かと。

投稿2018/11/01 11:15

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

"Too many open files"

と書いてあるので、ファイルをオープンし過ぎですね。
別のところでファイルをオープンしたままにしている処理があるのではないでしょうか?

投稿2018/11/01 07:38

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazukiikegami

2018/11/01 09:34

開いたまま の理解ができていないんですが、画像や効果音ファイルを読み込んでいるのですが、これに何か処理をしなければならないのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問