2016-09-08 2 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 
} 

문제는 다음 라인 애플 디벨로프가 아직 해결되지 않았습니까?

누구든지이 문제를 해결할 수 있습니까?

답변

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]() 
}