【问题标题】:tableView in Swift iOSSwift iOS 中的 tableView
【发布时间】:2015-11-30 16:10:24
【问题描述】:

我需要以下代码方面的帮助。由于某种原因,歌曲列表没有显示在表格中。从我的角度来看,一切都很好。如果有人能看到明显的东西,请指出。这是我的快速代码:

    func getMusicFilesInDirectory() -> [String] {

    // get the documents folder url
    let documentsUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!

    // get the directory contents (including folders)
    do {
        let directoryContents = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
        print(directoryContents)

    } catch let error as NSError {
        print(error.localizedDescription)
    }
    // filter the directory to extract only Wav Files

    do {
        let directoryUrls = try  NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
        print(directoryUrls)
        let wavFilesDir = directoryUrls.filter(){ $0.pathExtension! == "wav" }.map{ $0.lastPathComponent! }
        wavFiles = ["Music Files:\n" + wavFilesDir.description]
       } catch let error as NSError {
        print(error.localizedDescription)
    }
     return wavFiles
                                       }
// table view
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    //return wavFiles.count;
    return getMusicFilesInDirectory().count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
    cell.textLabel?.text = getMusicFilesInDirectory()[indexPath.row]
    cell.textLabel?.text = wavFiles[indexPath.row]
   return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    print("You selected cell#\(indexPath.row)")}

在听从下面这些人的一些线索后,我修改了代码并添加了以下方法。目前我仍然没有让列表显示在我的表中,原因是音乐文件无法在存储的目录中访问。一旦他们被移动到文档目录,一切都应该得到解决。完成后我会发布另一个更新。

    func tableView(tableView: UITableView, didSelectRowAtIndexPath   indexPath: NSIndexPath) {
    getFileCount({(success: Bool, error: String)-> Void in
        if success{
            tableView.reloadData();
        } else {
            print("No wave files Found");
        }
        })
    //print("You selected cell#\(indexPath.row)")
       }

func getFileCount (completionHandler : (success: Bool, error: String) -> Void) -> [String] {
    if wavFiles.count > 0 {
        completionHandler(success: true, error: "none");
    }else {
        completionHandler(success: false, error: "No files found");
    }
    return wavFiles
    }

【问题讨论】:

  • 你在哪里reloadData tableview?也许你忘了?
  • 我认为拥有完成处理程序将是一种有用的方式,因为您不会在加载数据后重新加载数据。只是一个建议:最好存储 getMusicFilesInDirectory 的结果,每次填充单元格时调用该函数。
  • @Eric D, @ kaizoku, 非常好的建议。试图找出在哪里重新加载数据。
  • 好的,你可以在函数定义中创建一个completionHandler。在变量上调用此函数时,定义完成处理程序的主体,您可以在那里编写 reloadData。所以一旦整个数据集被加载,你的 tableView.reloadData 就会被调用

标签: ios swift uitableview audio-player


【解决方案1】:
func sampleFunction (completionHandler : (success : Bool, error : String) -> Void) -> [String] {
    var someVariable = ["value1","value2","value2"];
    if someVariable.count > 0 {
        completionHandler(success: true, error: "");
    } else {
        completionHandler(success: false, error: "Some Problem");
    }
    return someVariable;
}

var dataHolder = sampleFunction({(success: Bool, error : String)-> Void in
    if success{
        tableView.reloadData();
    } else {
        print("Some Error");
    }
})

这是您可以尝试实现的示例代码。
我建议完成处理程序,因为您从某个外部来源或类似来源获取所有值,因此执行过程将在检索部分在后台工作时完成。
所以没有必要每次都使用这些处理程序。

【讨论】:

  • 听从了你的建议,但我没有得到任何数据。我上面的“return wavFiles”方法返回一个空数组。现在正在处理这个问题。
  • 哦,那retrieve data方法肯定有错误。尝试添加断点并找出错误
  • 感谢您的建议。我想我在错误的目录中。试图弄清楚如何检索我的应用程序目录或 iTunes 库的内容。任何提示将不胜感激
  • 感谢您的提示,我现在可以让上面的代码正常工作。我缺少的是访问 .wav 文件的能力。目录“documents”见下面的代码没有任何文件: let directoryUrls = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl,包括PropertiesForKeys: nil, options: NSDirectoryEnumerationOptions()) print(directoryUrls)
  • 哦,太好了!如果你觉得我有帮助,请接受答案 :) 祝你好运 :)
猜你喜欢
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2020-04-24
  • 2020-11-28
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
相关资源
最近更新 更多