5

次のコードは、3 つの簡単な手順で問題を強調しています。

1) モーメントを取得する

2) 瞬間をキャッシュする localIdentifier

3) 識別子付きのフェッチモーメント: 失敗 (デバイス上、iOS 8.2)

- ( void )momentLocalIdTest
{
    PHFetchResult       * fetchResult;
    PHAssetCollection   * moment;
    NSString            * localIdentifier;

    fetchResult = [ PHAssetCollection fetchMomentsWithOptions: nil ];

    if( fetchResult.count == 0 )
        return;

    moment          = fetchResult.firstObject;
    localIdentifier = moment.localIdentifier;
    fetchResult     = [ PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers: @[ localIdentifier ] options: nil ];

    if( fetchResult.count == 0 )
        NSLog( @"AssetCollection with localIdentifier %@ not found!!!", localIdentifier );
}

私は何か誤解していますか?それはかなり簡単なようです...

どんな助けでも大歓迎です!

4

1 に答える 1

0

私も同じ問題に遭遇しましたが、このコードの何が問題なのかわかりませんでした。この API は単純で単純に壊れていると思います (少なくとも 8.0 から 8.4)。

回避策のコードを次に示します。基本的に、識別子から PHAssetCollection インスタンスを再生成する必要があります

PHFetchOptions *options = [PHFetchOptions new];
options.predicate = [NSPredicate predicateWithFormat:@"localIdentifier = %@", identifier];

PHAssetCollection *collection = [[PHAssetCollection fetchMomentsWithOptions:options] firstObject];
PHFetchResult *results = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
于 2015-07-23T14:52:32.330 に答える