2015-06-09 7 views
5

Кажется, у меня случайная проблема, о которой я не знаю, почему это происходит. Кажется, я не могу заставить photoLibraryDidChange:(PHChange *)changeInstance вызывать наблюдатель. Я сделал несколько пустых проектов, и все они демонстрируют эту проблему, наблюдателю за изменениями иногда нужно будет приступить к первоначальной установке приложения, но он никогда не вызывается после того, как я выполняю изменения в приложении «Фотографии». Я также сбросил симулятор безрезультатно. Буду признателен за любую помощь.Наблюдатель изменений PHPhotoLibrary не называется

Код:

#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]; 
} 
+0

О чем вы говорите. Я иду в приложение «Фотографии» и любимый, непривлекательный и удаляю стоковые изображения. – klcjr89

+0

Вы не следуете? Нет кода. Это манипулирует в приложении «Фотографии», которое, как предполагается, не уведомляет вас об изменениях. – klcjr89

+0

@matt Да, я создал пустой проект с одним представлением, в котором ничего не найдено, чтобы понять, почему он сейчас не работает. Не будучи грубым, он работал для меня последние несколько дней, но не сейчас. – klcjr89

ответ

5

Я думаю, что есть что-то не так с тем, как вы тестируете. Он отлично работает для меня. Вот что я сделал.

Это весь код моего один вид контроллера:

#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, я вижу «Здесь» в консоли - это ожидается, потому что мы получаем уведомление об изменении, когда библиотека «оживает» после авторизации. Именно так должен наблюдаться наблюдатель.

  • Еще в симуляторе я ударил Shift-Command-H, чтобы перейти на трамплин. Я переключаюсь на приложение «Фото» и удаляю фотографию.

  • В симуляторе я дважды ударил Shift-Command-H, чтобы перейти к переключателю приложений.

  • В симуляторе я нажимаю на тестовое приложение, которое нужно выполнить, чтобы вернуться к нему. За симулятором в Xcode я вижу «здесь» в консоли, потому что пока мы отсутствовали, фотография была удалена. Опять же, именно так должен вести себя наблюдатель.

+0

Это будет работать, если вы убьете приложение и перезапустите его, пока не зарегистрируетесь снова. – Karthik

+0

@ KarthikSadhasivam Конечно. Так? Это как сказать: «Мой код не запускается, пока я его не запустил». Вид очевидный. – matt

 Смежные вопросы

  • Нет связанных вопросов^_^