【问题标题】:metadataquery deallocation before stopquery停止查询之前的元数据查询释放
【发布时间】:2015-07-04 13:15:24
【问题描述】:

我正在使用 NSMetadataQuery 获取 iCloud 普遍存在的 Documents 目录中的文件列表,以填充表格视图。该代码似乎可以正常工作,但我收到一条错误消息,指出在没有先调用 stopQuery 的情况下正在释放查询。我似乎找不到关于这个话题的讨论。我在这里遗漏了一些简单的东西吗?

这是查询和通知的功能:

var myMetadataQuery : NSMetadataQuery = NSMetadataQuery()
var cloudBackFiles : [AnyObject] = [AnyObject]()

func metadataForListOfFiles() {

    myMetadataQuery.predicate = NSPredicate(format: "%K like '*.sqlite'", NSMetadataItemFSNameKey)//change to "%K like '*.sqlite'"
    myMetadataQuery.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "metadataQueryDidFinishGathering:", name: NSMetadataQueryDidFinishGatheringNotification, object: myMetadataQuery)

    myMetadataQuery.startQuery()

}//metadataForListOfFiles

func metadataQueryDidFinishGathering(notification : NSNotification) -> [AnyObject] {

    let query : NSMetadataQuery = notification.object as! NSMetadataQuery
    query.disableUpdates()

    NSNotificationCenter.defaultCenter().removeObserver(self, name: NSMetadataQueryDidFinishGatheringNotification, object: query)

    query.stopQuery()

    let results = query.results

    cloudBackFiles = []

    if (query.resultCount >= 1) {
        println("query.resultCount = \(query.resultCount)")

        for var i = 0; i < query.resultCount; i++ {
            var forResultString = results[i].valueForAttribute(NSMetadataItemFSNameKey) as! String
            println("results[\(i)].value = \(forResultString)")
            var forResultStringNoExt = forResultString.stringByDeletingPathExtension
            cloudBackFiles.append(forResultStringNoExt)
        }//for

    } else {

        println("The query.resultCount was 0!")

    }//if count else
    println("cloudBackFiles list is: ")
    println(cloudBackFiles)

    //justForTest = results

    return results

}//metadataQueryDidFinishGathering(x)

这是错误:

2015-04-24 22:49:38.367 [26397:2377464] 正在被释放 无需先调用 -stopQuery。为避免竞争条件,您应该首先调用 -stopQuery 在调用 -startQuery 的运行循环上

任何指导将不胜感激。

【问题讨论】:

    标签: ios swift nsmetadataquery


    【解决方案1】:

    我相信我是在递归调用元数据查询。我重写了 tableview 控制器的 viewDidLoad 和 viewWillAppear 方法,现在我相信上面的代码可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2018-04-03
      • 2011-01-23
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多