无法使用MediaLibrary框架读取外部Fotos库

时间:2019-06-23 09:55:56

标签: xcode macos-mojave media-library

我正在尝试从外部光盘(“ /Seagate”)中读取带有MediaLibrary框架的Fotos库。 无论我尝试什么,都只能从位于“图片”下的默认库中获取数据。

使用Fotos应用程序读取外部库可完美运行。 (我更改了Fotos中的路径) 在我的应用中,我尝试了几种选择:

  1. 使用选项字典连接到MediaLibrary 通过MLMediaLoadFoldersKey包括我的外部设备(请参见下面的代码)。没有成功

  2. 使用不同的标识符读取mediaGroups。没有成功

我想知道为什么尽管我定义了默认文件夹和我的外部文件夹,但为什么我却得不到2个mediaSources

应该很好地管理从库中延迟加载数据的方面,因为我为所有步骤设置了观察者:library -> sources -> groups -> objects

要点1:

 NSDictionary *options = @{
                              MLMediaLoadSourceTypesKey: @(MLMediaSourceTypeImage),
                              MLMediaLoadIncludeSourcesKey: @[MLMediaSourcePhotosIdentifier,MLMediaSourceiPhotoIdentifier],
                              MLMediaLoadFoldersKey:@[MLMediaLoadFoldersKey,@"//Seagate/Fotos Library"]

    if ( mediaLibrary == Nil) {
        MLMediaLibrary *MmediaLibrary = [[MLMediaLibrary alloc] initWithOptions:options];
        mediaLibrary = MmediaLibrary;
    }

    [mediaLibrary addObserver:self
                   forKeyPath:@"mediaSources"
                      options:0
                      context:(__bridge void *)@"mediaLibraryLoaded"];

    [mediaLibrary mediaSources];

要点2:

//...
    else if (context == (__bridge void *)@"rootMediaGroupLoaded")
    {
        MLMediaGroup *sharedAlbums   = [mediaSource mediaGroupForIdentifier:@"TopLevelAlbums"];
        MLMediaGroup *topLevelAlbums = [mediaSource mediaGroupForIdentifier:@"Albums"];
        MLMediaGroup *allFotosAlbums = [mediaSource mediaGroupForIdentifier:@"Fotos"];
        MLMediaGroup *iPhotoAlbums   = [mediaSource mediaGroupForIdentifier:@"iPhotos"];
        NSArray *albumList = [sharedAlbums.childGroups arrayByAddingObjectsFromArray:topLevelAlbums.childGroups];
        albumList = [albumList arrayByAddingObjectsFromArray:allFotosAlbums.childGroups];
        albumList = [albumList arrayByAddingObjectsFromArray:iPhotoAlbums.childGroups];
        //albumList = [albumList arrayByAddingObjectsFromArray:@[topLevelAlbums]];

        {

            [self addObserver:self
                   forKeyPath:@"nextAlbumIndex"
                      options:0
                      context:@"nextAlbumIndex"]; // manages the loop over all albums

#pragma mark query all photos of one Album
            //
            MLMediaGroup *Nalbum = [[AlbumList objectAtIndex:nextAlbumIndex] group];
            [Nalbum addObserver:self
                     forKeyPath:@"mediaObjects"
                        options:0
                        context:@"mediaObjects"];

            [Nalbum mediaObjects];  // query the list and store result in Malbum
        }}
}

我希望检索外部Fotos库,但是我总是得到默认的库。 没有错误消息,可能会给我一些提示。

1 个答案:

答案 0 :(得分:0)

在咨询Apple支持之后,有人告诉我,不支持从默认路径以外的其他路径读取Fotos库。