2015-06-09 8 views
5

Ich habe ein zufälliges Problem zu haben, dass ich keine Ahnung habe, warum passiert. Ich kann nicht scheinen, dass der photoLibraryDidChange:(PHChange *)changeInstance vom Beobachter aufgerufen wird. Ich habe mehrere leere Projekte erstellt und alle demonstrieren dieses Problem. Der Change Observer wird manchmal bei der ersten App-Installation aufgerufen, aber nie aufgerufen, wenn ich Änderungen an der Fotos-App vorgenommen habe. Ich habe den Simulator auch vergebens zurückgesetzt. Ich würde jede Hilfe, die angeboten wird, schätzen.PHPhotoLibrary Änderung Beobachter nicht genannt

Code:

#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

Wovon redest du? Ich gehe auf die Fotos App und Favoriten, ungünstig, und lösche die Archivbilder. – klcjr89

+0

Folgen Sie nicht? Es gibt keinen Code. Dadurch wird IN in der Fotos-App manipuliert, die Sie über Änderungen informieren soll. – klcjr89

+0

@matt Ja, ich habe ein leeres Einzelansichtsprojekt erstellt, in dem nichts zu finden ist, um herauszufinden, warum es jetzt nicht funktioniert. Es war nicht unhöflich, es funktionierte für mich in den letzten paar Tagen, aber jetzt nicht. – klcjr89

Antwort

5

Ich denke, es ist etwas falsch mit, wie Sie testen. Es funktioniert gut für mich. Hier ist was ich getan habe.

Dies ist der gesamte Code meines eine View-Controller:

#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 
  • ich die app im Simulator laufen. Autorisierung wird angefordert. Ich erlaube. Hinter dem Simulator, wo Xcode läuft, sehe ich "Here" in der Konsole - das wird erwartet, weil wir eine Änderungsbenachrichtigung erhalten, wenn die Bibliothek nach der Autorisierung "zum Leben erwacht". Genau so soll sich der Beobachter verhalten.

  • Noch im Simulator, habe ich Shift-Command-H gedrückt, um zum Sprungbrett zu gehen. Ich wechsle zur Foto-App und lösche ein Foto.

  • Im Simulator zweimal Shift-Command-H drücken, um den App-Switcher aufzurufen.

  • Im Simulator klicke ich auf die noch laufende Test-App, um zu ihr zurückzukehren. Hinter dem Simulator in Xcode sehe ich "Here" in der Konsole, denn während wir draußen waren, wurde ein Foto gelöscht. Genau so soll sich der Beobachter verhalten.

+0

funktioniert es, wenn Sie die App beenden und neu starten, bis Sie sich erneut registrieren. – Karthik

+0

@KarthikSadhasivam Natürlich. Damit? Das ist so, als würde man sagen "Mein Code läuft nicht, bis ich ihn ausführe". Offensichtlich. – matt

Verwandte Themen