PHPhotoLibrary更改未调用的观察者

时间:2015-06-09 03:38:40

标签: ios objective-c photosframework phphotolibrary

我似乎有一个随机的问题,我不知道为什么会发生。我似乎无法让观察者调用photoLibraryDidChange:(PHChange *)changeInstance。我已经制作了几个空白项目并且都在展示这个问题,有时会在初始应用程序安装时调用更改观察器,但在我在照片应用程序中执行更改时从未调用过。我也重置模拟器无济于事。我很感激你提供的帮助。

代码:

#import <UIKit/UIKit.h>
#import <Photos/Photos.h>

@interface ViewController : UIViewController <PHPhotoLibraryChangeObserver>

@end

- (void)viewDidLoad
{
    [super viewDidLoad];

    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status)
     {
         if (status == PHAuthorizationStatusAuthorized)
         {
             [PHPhotoLibrary.sharedPhotoLibrary registerChangeObserver:self];

              dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^
              {
                 [self setup];
              });
         }
     }];
}

- (void)setup
{
    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc]init];

    fetchOptions.wantsIncrementalChangeDetails = YES;

    PHFetchResult *smartAlbumsFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions];

    for (PHAssetCollection *sub in smartAlbumsFetchResult)
    {
        PHFetchResult *fetch = [PHAsset fetchAssetsInAssetCollection:sub options:fetchOptions];
    }
}

- (void)photoLibraryDidChange:(PHChange *)changeInstance
{
    NSLog(@"Not called");
}

- (void)dealloc
{
   [PHPhotoLibrary.sharedPhotoLibrary unregisterChangeObserver:self];
}

1 个答案:

答案 0 :(得分:8)

我认为您的测试方式有问题。这对我来说可以。这就是我的所作所为。

这是我的一个视图控制器的整个代码:

#import <UIKit/UIKit.h>
@import Photos;
#import "ViewController.h"

@interface ViewController() <PHPhotoLibraryChangeObserver>
@end
@implementation ViewController : UIViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
         if (status == PHAuthorizationStatusAuthorized) {
             [PHPhotoLibrary.sharedPhotoLibrary registerChangeObserver:self];
         }
     }];
}
- (void)photoLibraryDidChange:(PHChange *)changeInstance
{
    NSLog(@"Here");
}
@end
  • 我在模拟器中运行应用程序。要求授权。我授权。在Xcode运行的模拟器后面,我看到&#34; Here&#34;在控制台中 - 这是预料之中的,因为我们会在图书馆生效时收到更改通知&#34;授权后。这正是观察者的行为方式。

  • 仍在模拟器中,我按下Shift-Command-H进入跳板。我切换到照片应用并删除照片。

  • 在模拟器中,我按两次Shift-Command-H进入应用切换器。

  • 在模拟器中,我点击仍在运行的测试应用程序返回它。在Xcode的模拟器后面,我看到&#34;在这里&#34;在控制台中,因为我们外出时,照片被删除了。同样,这正是观察者的行为方式。