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

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

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

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

Swift

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

Q&A

解決済

1回答

733閲覧

swiftでDocumentフォルダのURLを取得しようとするとエラーが出る

Tanaei0301

総合スコア4

iOS

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

Swift

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

0グッド

0クリップ

投稿2023/01/06 02:29

編集2023/01/06 05:52

前提

ここに質問の内容を詳しく書いてください。
swift初心者です。
課題研究ようにちょっとしたスマホアプリを作っています。
DocumentsフォルダのURLを取得したいのですがエラーが出ます。

実現したいこと

DocumentsフォルダのURLを取得したい

発生している問題・エラーメッセージ

Thread 1: EXC_BAD_ACCESS (code=2, address=0x16b3a7fe0)

該当のソースコード

swift

1class FileController{ 2 var audioPlayer: AVAudioPlayer! 3 let fileManager = FileManager() 4 let documentPaths:URL 5 let getDateTime = GetDateTime() 6 7 init(){ 8 documentPaths = try! fileManager.url(for: .documentDirectory,in: .userDomainMask,appropriateFor: nil, create: false) 9 10 } 11//... 12}

試したこと

FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
で試したました。同じエラーが発生しました。
別のプロジェクトで実行した時は問題なく動作しました。
xcode、シュミレータの再起動をしました。

//追加
別プロジェクトでもまるまるコピーして実行するとエラーが出ました。
一度関数を全てコメントアウトして実行したあと関数を戻すとなぜか正常に動作しました。
そのコードをこのプロジェクトに戻して実行してみると同じエラーが出ました

補足情報(FW/ツールのバージョンなど)

昨日まで正常に動作していたのですが今日試したらなぜかエラーが出るようになっていました。
昨日他のプロジェクトにAudioKitを導入しようとしていたのでそれが原因かもしれませんが他のプロジェクトでは正常に動くのが確認できたので原因がよくわかりません。

swift : 5. 7. 1
macOS : 13
xcode : 14.1

一応全文です

swift

1import Foundation 2import AVFoundation 3import UIKit 4 5class FileController{ 6 let fileManager = FileManager() 7 let documentPaths:URL 8 let getDateTime = GetDateTime() 9 10 init(){ 11 documentPaths = try! fileManager.url(for: .documentDirectory,in: .userDomainMask,appropriateFor: nil, create: false) 12 } 13 14 //条件に準拠するファイル名だけを抽出して日付順に並び替えて返す 15 func searchFile()-> (Array<String>)?{ 16 let urls = documentPaths 17 print(urls.path) 18 guard var fileNames = try? FileManager.default.contentsOfDirectory(atPath: urls.path) else { 19 return nil 20 } 21 fileNames.removeAll(where: {$0 == ".DS_Store"}) 22 for (index, country) in fileNames.enumerated().reversed(){ 23 if country.contains(".m4a") || country.contains(".txt"){ 24 fileNames.remove(at: index) 25 } 26 } 27 28 //取得したファイルを作成日時が近い順に並び替える バブルソート 29 var aDate:Date 30 var bDate:Date 31 let fileCount = fileNames.count 32 print(fileCount) 33 guard fileCount != 0 && fileCount != 1 else{ 34 return fileNames 35 } 36 for i in 0 ..< (fileCount-1){ 37 for j in (0 ..< (fileCount-1-i)){ 38 aDate = fileUpDate(fileName: fileNames[j], directName: nil, UDT:true) as! Date 39 bDate = fileUpDate(fileName: fileNames[j+1], directName: nil, UDT:true) as! Date 40 print(fileNames) 41 42 if aDate < bDate{ 43 fileNames.swapAt(j,j+1) 44 } 45 } 46 } 47 print(fileNames) 48 return fileNames 49 } 50 51 52 func open_file(fileName: String ,directName: String?) -> String{ 53 let docsDirect = documentPaths 54 var url_s:URL 55 if directName != nil{ 56 let fileDirect = docsDirect.appendingPathComponent(directName!) 57 url_s = fileDirect.appendingPathComponent(fileName) 58 } 59 else{ 60 url_s = docsDirect.appendingPathComponent(fileName) 61 } 62 var fileContents = try? String(contentsOf: url_s, encoding: .utf8) 63 64 if fileContents == nil{ 65 fileContents = "データはありませんでした" 66 } 67 return fileContents! 68 } 69 70 func create_Direct(directName: String) -> Bool{ 71 let fileManager = FileManager.default 72 do{ 73 //ディレクトリ作成 74 let docs = try fileManager.url(for: .documentDirectory, 75 in: .userDomainMask, 76 appropriateFor: nil, create: false) 77 let directPath = docs.appendingPathComponent(directName) 78 print(directPath.path) 79 try FileManager.default.createDirectory(atPath: directPath.path, withIntermediateDirectories : true, attributes: nil) 80 81 return true 82 }catch{ 83 print("createDirectNotFound") 84 return false 85 } 86 } 87 88 //データの保存 89 func savetext_File(directName : String? , FileName: String ,data: String) -> Bool{ 90 let saveDirectPath : URL 91 if directName == nil{ 92 saveDirectPath = documentPaths 93 } 94 else{ 95 saveDirectPath = documentPaths.appendingPathComponent(directName!) 96 } 97 98 let savePaths = saveDirectPath.appendingPathComponent(FileName+".txt") 99 let Data = data.data(using: .utf8)! 100 101 102 guard fileManager.createFile(atPath: savePaths.path, contents: Data, attributes: nil) else{ 103 return false 104 } 105 return true 106 } 107 108 109 func newFileNameChecker(checkFileName: String?) -> Bool{ 110 let existingFileName = searchFile() 111 if checkFileName == nil || checkFileName == ""{ 112 return false 113 } 114 else{ 115 for element in existingFileName!{ 116 if checkFileName == element{ 117 return false 118 } 119 } 120 } 121 return true 122 } 123 124 func fileCounter() -> Int{ 125 let fileList = self.searchFile() 126 guard fileList != nil else{ 127 return 0 128 } 129 return fileList!.count 130 } 131 132 func fileUpDate(fileName : String ,directName : String? ,UDT:Bool) -> Any{ 133 let directUrls:URL 134 if directName != nil{ 135 directUrls = documentPaths.appendingPathComponent(directName!) 136 } 137 else{ 138 directUrls = documentPaths 139 } 140 let urls = directUrls.appendingPathComponent(fileName) 141 let attributes = try? fileManager.attributesOfItem(atPath: urls.path) 142 if UDT == true{ 143 return attributes![.modificationDate]! 144 } 145 else{ 146 let jp_formatedTime = getDateTime.formateJPtime(UDT: attributes![.modificationDate]!) 147 return jp_formatedTime 148 } 149 } 150 151 func removeDirect(removeDirectName: String) -> Bool{ 152 let removeURL = documentPaths.appendingPathComponent(removeDirectName) 153 do{ 154 try fileManager.removeItem(at: removeURL) 155 } 156 catch{ 157 return false 158 } 159 return true 160 } 161 162 func audioFileSave(directName:String)->Bool{ 163 let saveUrl = forAudioUrlPath() 164 let toPath = documentPaths.appendingPathComponent(directName) 165 let fullPath = toPath.appendingPathComponent("audio.m4a") 166 do{ 167 try fileManager.moveItem(atPath: saveUrl.path, toPath: fullPath.path) 168 } 169 catch{ 170 print(error) 171 return false 172 } 173 return true 174 } 175 176 func forAudioUrlPath() -> URL{ 177 let docsDirect = documentPaths 178 let url = docsDirect.appendingPathComponent("audio.m4a") 179 return url 180 } 181 182 183 func saveImageFile(directName:String,image:UIImage)-> Bool{ 184 guard let jpegImage = image.jpegData(compressionQuality: 1.0) else{ 185 return false 186 } 187 188 let saveDirectPath = documentPaths.appendingPathComponent(directName) 189 do{ 190 try jpegImage.write(to: saveDirectPath.appendingPathComponent("Image.jpg")) 191 } 192 catch{ 193 return false 194 } 195 return true 196 } 197 198 func loadImageFile(directName: String) -> UIImage?{ 199 let imageFilePath = documentPaths.appendingPathComponent(directName) 200 if let imageData = try? Data(contentsOf: imageFilePath.appendingPathComponent("Image.jpg")),let image = UIImage(data: imageData){ 201 return image 202 } 203 return nil 204 } 205}

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

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

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

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

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

hoshi-takanori

2023/01/06 04:27

もしかして、var audioPlayer: AVAudioPlayer! が初期化されてないのにアクセスしようとしたのでは…。
Tanaei0301

2023/01/06 05:00

まさかのaudioPlayer使っていなかったの消去して試してみました。(前に使おうとして結局使わなくて放置されてたみたいです。気をつけます…)エラー内容は変わらなかったのです…
Tanaei0301

2023/01/06 05:07

一応プログラム全文載せておきました。変なところが多くあると思いますが多めにみてください🙇
Tanaei0301

2023/01/06 05:43

ファイルの中身全文をコピーして別プロジェクトで実行したところ同じエラーが出ました。別のプロジェクトで関数を全てコメントアウトして実行したことろエラーは消えました。なので多分関数のどこかに問題があるみたいです。
Tanaei0301

2023/01/06 06:10

お騒がせして申し訳ありませんでした。hoshi-takanoriさんが最初におっしゃっていた通り別クラスにあったaudioPlayerが原因でした。
guest

回答1

0

自己解決

viewControllerで参照していたクラスでAVAudioPlayerを呼んでいたのでそのクラスの参照を止めるとうまく動作しました。
おそらく昨日いじった後テストせずに閉じてしまったようで、そのせいだとは思いませんでした。

投稿2023/01/06 06:17

Tanaei0301

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問