gpt4 book ai didi

ios - 无法将记录的文件列出到 TableView

转载 作者:行者123 更新时间:2023-11-28 08:32:45 25 4
gpt4 key购买 nike

我急需帮助,因为我的头撞在墙上真的很疼。

我有一个 View Controller ,我在其中使用麦克风录制音频并将其保存到应用程序文档目录中。这运行良好,如果我在模拟器中导航到该文件夹​​,我可以看到这些文件。

我的问题是我有一个带有自己的 TableViewController 的 TableView,我想在其中列出包含我的录音的文档目录的内容。我创建了 TableView,它正在读取和填充基于基本数组的表。我的问题是我无法将其转换为读取文档目录内容。

我对该表的 future 目标是允许我通过滑动特定的单元格从该 TableView 中播放、删除或重命名文件。

我已经在这个问题上工作了大约 5 天,我确信我忽略了对你们所有人来说非常简单的事情。

我正在使用 Xcode 7.3.1 和 Swift 2。

提前致谢,我迫不及待地想做出贡献。

ViewControllerRecorder.swift(这是我录制音频并将其保存到正在运行的文档目录的地方。)

import UIKit
import AVFoundation
import PermissionScope

class ViewControllerRecorder: UIViewController, AVAudioRecorderDelegate, AVAudioPlayerDelegate {

@IBOutlet weak var stopButton: UIButton!
@IBOutlet weak var recordButton: UIButton!
@IBOutlet weak var playButton: UIButton!

@IBOutlet weak var audioDuration: UISlider!


var audioRecorder:AVAudioRecorder?
var audioPlayer:AVAudioPlayer?

let pscope = PermissionScope()


override func viewDidLoad() {
super.viewDidLoad()

audioDuration.value = 0.0

// Set up permissions
pscope.addPermission(MicrophonePermission(),
message: "Inorder to use this app, you need to grant the microphone permission")

// Show dialog with callbacks
pscope.show({ finished, results in
print("got results \(results)")
}, cancelled: { (results) -> Void in
print("thing was cancelled")
})

// Disable Stop/Play button when application launches
stopButton.enabled = false
playButton.enabled = false




// Get the document directory. If fails, just skip the rest of the code
guard let directoryURL = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).first else {

let alertMessage = UIAlertController(title: "Error", message: "Failed to get the document directory for recording the audio. Please try again later.", preferredStyle: .Alert)
alertMessage.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
presentViewController(alertMessage, animated: true, completion: nil)

return
}

// Set the default audio file
let audioFileURL = directoryURL.URLByAppendingPathComponent("PWAC_" + NSUUID().UUIDString + ".m4a")

// Setup audio session
let audioSession = AVAudioSession.sharedInstance()

do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)




// Define the recorder setting
let recorderSetting: [String: AnyObject] = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 32000.0,
AVNumberOfChannelsKey: 2,
AVEncoderAudioQualityKey: AVAudioQuality.Medium.rawValue
]

// Initiate and prepare the recorder
audioRecorder = try AVAudioRecorder(URL: audioFileURL, settings: recorderSetting)
audioRecorder?.delegate = self
audioRecorder?.meteringEnabled = true
audioRecorder?.prepareToRecord()

} catch {
print(error)
}

}


func updateaudioDuration(){

audioDuration.value = Float(audioPlayer!.currentTime)
}

@IBAction func sliderAction(sender: AnyObject) {


audioPlayer!.currentTime = NSTimeInterval(audioDuration.value)

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func play(sender: AnyObject) {
if let recorder = audioRecorder {
if !recorder.recording {
do {
audioPlayer = try AVAudioPlayer(contentsOfURL: recorder.url)

audioDuration.maximumValue = Float(audioPlayer!.duration)
_ = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: #selector(ViewControllerRecorder.updateaudioDuration), userInfo: nil, repeats: true)

audioPlayer?.delegate = self
audioPlayer?.play()
playButton.setImage(UIImage(named: "playing"), forState: UIControlState.Selected)
playButton.selected = true
} catch {
print(error)
}
}
}
}

@IBAction func stop(sender: AnyObject) {
recordButton.setImage(UIImage(named: "record"), forState: UIControlState.Normal)
recordButton.selected = false
playButton.setImage(UIImage(named: "play"), forState: UIControlState.Normal)
playButton.selected = false

stopButton.enabled = false
playButton.enabled = true

audioRecorder?.stop()

let audioSession = AVAudioSession.sharedInstance()

do {
try audioSession.setActive(false)
} catch {
print(error)
}
}

@IBAction func record(sender: AnyObject) {
// Stop the audio player before recording
if let player = audioPlayer {
if player.playing {
player.stop()
playButton.setImage(UIImage(named: "play"), forState: UIControlState.Normal)
playButton.selected = false
}
}

if let recorder = audioRecorder {
if !recorder.recording {
let audioSession = AVAudioSession.sharedInstance()

do {
try audioSession.setActive(true)

// Start recording
recorder.record()
recordButton.setImage(UIImage(named: "recording"), forState: UIControlState.Selected)
recordButton.selected = true


} catch {
print(error)
}

} else {
// Pause recording
recorder.pause()
recordButton.setImage(UIImage(named: "pause"), forState: UIControlState.Normal)
recordButton.selected = false
}
}

stopButton.enabled = true
playButton.enabled = false

}


// MARK: - AVAudioRecorderDelegate Methods
func audioRecorderDidFinishRecording(recorder: AVAudioRecorder, successfully flag: Bool) {
if flag {

// iOS8 and later
let alert = UIAlertController(title: "Recorder",
message: "Finished Recording",
preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Keep", style: .Default, handler: {action in
print("keep was tapped")
}))
alert.addAction(UIAlertAction(title: "Delete", style: .Default, handler: {action in
print("delete was tapped")
self.audioRecorder!.deleteRecording()
}))

self.presentViewController(alert, animated:true, completion:nil)

// let alertMessage = UIAlertController(title: "Finish Recording", message: "Successfully recorded the audio!", preferredStyle: .Alert)
// alertMessage.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
// presentViewController(alertMessage, animated: true, completion: nil)
print("Audio has finished recording")
print(recorder.url)
}
}

// MARK: - AVAudioPlayerDelegate Methods
func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
playButton.setImage(UIImage(named: "play"), forState: UIControlState.Normal)
playButton.selected = false

let alertMessage = UIAlertController(title: "Finish Playing", message: "Finish playing the recording!", preferredStyle: .Alert)
alertMessage.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
presentViewController(alertMessage, animated: true, completion: nil)
print("Audio has finished playing")
print(player.url)
}


}

ViewControllerFileManager.swift(这是我要将文档目录的内容显示到 TableView 的 View Controller 。)

2016/07/27 更新

import UIKit

class ViewControllerFileManager: UIViewController, UITableViewDataSource, UITableViewDelegate {

var arrayRecordings = [String]()

override func viewDidLoad() {
super.viewDidLoad()

let fileManager = NSFileManager.defaultManager()
let dirPath = NSBundle.mainBundle().resourcePath!


let items = try! fileManager.contentsOfDirectoryAtPath(dirPath)

for item in items {
if item.hasSuffix("m4a") {

arrayRecordings.append(item)

}
print("Found \(item)")
}



// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of rows in the section.
return arrayRecordings.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cellIdentifier = "Cell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath)



// Configure the cell...


cell.textLabel?.text = arrayRecordings[indexPath.row]
return cell
}

override func prefersStatusBarHidden() -> Bool {
return true
}

}

最佳答案

如果是在viewDidLoad中填充数组,需要调用tableView的reloadData来刷新。

override func viewDidLoad()
{
super.viewDidLoad()

// populate recordingFileNames here

// refresh your table
reloadTableViewContent()
}

func reloadTableViewContent()
{
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
self.tableView.scrollRectToVisible(CGRectMake(0, 0, 1, 1), animated: false)
})
}

关于ios - 无法将记录的文件列出到 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38556581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com