首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“获取选项中不支持的谓词: osx中的标题==”测试“

“获取选项中不支持的谓词: osx中的标题==”测试“
EN

Stack Overflow用户
提问于 2016-09-08 08:04:12
回答 1查看 1.5K关注 0票数 3

我目前正在开发一个应用程序,我需要在每个相册的手机上显示本地存储的图像。我已经成功地显示了所有的相册名称,现在当选择一个相册时,我想要显示这些图像。

代码语言:javascript
复制
func getLocalAlbums() {
    var albums: [AlbumModel] = [AlbumModel]()
    albumNamesDevice.removeAll()

    let options = PHFetchOptions()
    let topLvlOptions = PHFetchOptions()
    let userAlbums = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: options)
    let topLvlCollection = PHCollectionList.fetchTopLevelUserCollectionsWithOptions(topLvlOptions)

    let allAlbums = [topLvlCollection, userAlbums]

    for i in 0 ..< allAlbums.count {
        let result = allAlbums[i]

        result.enumerateObjectsUsingBlock { (asset, index, stop) in
            if asset is PHAssetCollection {
                let ass: PHAssetCollection = asset as! PHAssetCollection
                let fetchOptions = PHFetchOptions()

                fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue)

                let newAlbum = AlbumModel(name: ass.localizedTitle!, count: ass.estimatedAssetCount, collection: ass)
                albums.append(newAlbum)
            }
        }
    }

    for item in albums {
        self.albumNamesDevice.append(item.name)
    }
}

func getAssetsFromAlbum(albumName: String) -> [PHAsset] {

    let options = PHFetchOptions()
    // Bug from Apple since 9.1, use workaround
    options.predicate = NSPredicate(format: "title = %@", albumName)
    options.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: true) ]

    let results = PHAsset.fetchAssetsWithMediaType(.Image, options: options)
    var assets = [PHAsset]()

    results.enumerateObjectsUsingBlock { (obj, index, stop) in

        if let asset = obj as? PHAsset {
            assets.append(asset)
        }
    }

    return assets
}

问题是下面一行:

代码语言:javascript
复制
options.predicate = NSPredicate(format: "title = %@", albumName)

我不断地发现错误:

由于“NSInvalidArgumentException”异常终止应用程序,原因:“获取选项中不支持谓词:标题==”“测试”

我在2014年就读到过,这是一个bug,但这怎么可能还没有被Apple devs解决呢?

有人知道这方面的工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 14:36:24

最后,我找到了答案,或者至少找到了一个解决办法。

代码语言:javascript
复制
func getAssetsFromAlbum(albumName: String) -> [PHAsset] {

    let options = PHFetchOptions()
    // Bug from Apple since 9.1, use workaround
    //options.predicate = NSPredicate(format: "title = %@", albumName)
    options.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: true) ]

    let collection: PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: nil)

    for k in 0 ..< collection.count {
        let obj:AnyObject! = collection.objectAtIndex(k)
        if obj.title == albumName {
            if let assCollection = obj as? PHAssetCollection {
                let results = PHAsset.fetchAssetsInAssetCollection(assCollection, options: options)
                var assets = [PHAsset]()

                results.enumerateObjectsUsingBlock { (obj, index, stop) in

                    if let asset = obj as? PHAsset {
                        assets.append(asset)
                    }
                }

                return assets
            }
        }
    }
    return [PHAsset]()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39385644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档