2015-06-09 24 views
5

Mi sembra di avere un problema casuale che non ho idea del perché sta accadendo. Non riesco a ottenere che lo photoLibraryDidChange:(PHChange *)changeInstance venga chiamato dall'osservatore. Ho realizzato diversi progetti vuoti e tutti stanno dimostrando questo problema, a volte l'osservatore delle modifiche viene richiamato durante l'installazione iniziale dell'app, ma non viene mai chiamato dopo l'esecuzione delle modifiche nell'app Foto. Ho anche resettato il simulatore senza alcun risultato. Apprezzerei qualsiasi aiuto offerto.PHPhotoLibrary change observer non chiamato

Codice:

#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

Di cosa stai parlando. Vado all'app Foto e preferita, sfavorevole ed elimina le immagini di archivio. – klcjr89

+0

Non segui? Non c'è codice. Questo sta manipolando nell'app Foto, che dovrebbe notificare modifiche. – klcjr89

+0

@matt Sì, ho creato un progetto vuoto a vista singola con nulla in esso per cercare di capire perché non funziona ora. Non essendo scortese, stava lavorando per me negli ultimi giorni, ma non è ora. – klcjr89

risposta

5

penso che ci sia qualcosa di sbagliato in modo che si sta testando. Funziona bene per me. Ecco cosa ho fatto.

Questo è l'intero codice del mio controller di vista:

#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 
  • corro l'applicazione nel simulatore. L'autorizzazione è richiesta Autorizzo. Dietro il simulatore, dove Xcode è in esecuzione, vedo "Qui" nella console - questo è previsto, perché riceviamo una notifica di modifica quando la libreria "prende vita" dopo l'autorizzazione. Questo è esattamente il modo in cui si suppone che l'osservatore si comporti.

  • Sempre nel simulatore, premo Maiuscole-Comando-H per andare al trampolino. Passare all'app Foto ed eliminare una foto.

  • Nel simulatore, premo Shift-Command-H due volte per passare al commutatore di app.

  • Nel simulatore, faccio clic sull'app di test ancora in esecuzione per tornare ad essa. Dietro il simulatore di Xcode, vedo "Qui" nella console, perché mentre eravamo fuori, una foto è stata cancellata. Di nuovo, questo è esattamente il modo in cui si suppone che l'osservatore si comporti.

+0

non funziona se si uccide l'app e si riavvia finché non si registra di nuovo. – Karthik

+0

@KarthikSadhasivam Naturalmente. Così? È come dire "Il mio codice non funziona finché non lo eseguo". Un po 'ovvio. – matt