2015-06-09 10 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

@ मैट हां, मैंने एक खाली सिंगल व्यू प्रोजेक्ट बनाया है जिसमें यह पता लगाने की कोशिश की जा रही है कि यह अभी क्यों काम नहीं कर रहा है। अशिष्ट नहीं, यह पिछले कुछ दिनों से मेरे लिए काम कर रहा था लेकिन अब नहीं है। – 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 
  • मैं सिम्युलेटर में अनुप्रयोग चलाने के। प्रमाणीकरण का अनुरोध है। मैं अधिकृत करता हूँ। सिम्युलेटर के पीछे, जहां एक्सकोड चल रहा है, मैं कंसोल में "यहां" देखता हूं - इसकी अपेक्षा की जाती है, क्योंकि प्राधिकरण के बाद पुस्तकालय "जीवन में आता है" जब हमें एक परिवर्तन अधिसूचना मिलती है। यह वही है कि पर्यवेक्षक का व्यवहार कैसे किया जाता है।

  • अभी भी सिम्युलेटर में, मैंने स्प्रिंगबोर्ड पर जाने के लिए Shift-Command-H दबाया। मैं फ़ोटो ऐप पर स्विच करता हूं और एक फोटो हटा देता हूं।

  • सिम्युलेटर में, मैंने ऐप स्विचर जाने के लिए दो बार Shift-Command-H दबाया।

  • सिम्युलेटर में, मैं इसे वापस करने के लिए अभी भी चल रहे परीक्षण ऐप पर क्लिक करता हूं। एक्सकोड में सिम्युलेटर के पीछे, मैं कंसोल में "यहां" देखता हूं, क्योंकि जब हम बाहर थे, तो एक तस्वीर हटा दी गई थी। फिर, यह वही है कि पर्यवेक्षक का व्यवहार कैसे किया जाता है।

+0

यदि आप ऐप को मारते हैं और फिर से पंजीकरण करते हैं तो पुनरारंभ करते हैं तो यह काम करता है। – Karthik

+0

@ कार्तिकसाधसिवम बेशक। इसलिए? यह कहने जैसा है "मेरा कोड तब तक नहीं चलता जब तक कि मैं इसे चलाता हूं।" स्पष्ट प्रकार की तरह। – matt

संबंधित मुद्दे