2016-09-08 11 views
1

現在、アルバムごとに電話にローカルに保存されている画像を表示する必要があるアプリで作業しています。私はすべてのアルバム名を表示することができました。そして、アルバムが選択されたら、私は画像を表示したいと思います。私はどのようにそれをすることができ、これはバグが2014年に戻っていたことを読んで、しかししている'フェッチオプションでサポートされていない述語:title == "osx"の "Test"'

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate in fetch options: title == "Test"'

:私はエラーを取得しておく

options.predicate = NSPredicate(format: "title = %@", albumName) 

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 
} 

問題は、次の行でありますこれはまだAppleの開発者によって解決されていないことですか?

誰もがこのために回避策を知っていますか?

答えて

0

は最終的に私は答えを見つけた、または少なくとも回避策

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]() 
} 
関連する問題