2012-11-15 17 views
6

नहीं ले पा रहा है कि क्यों एक सूचना प्राप्त नहीं होगा करने के लिए के रूप में मानक कारणों के बारे में पता कर रहा हूँ:NSNotificationCenter ऑब्जर्वर अधिसूचना

  • Deallocating या पंजीकृत वस्तु समाप्त करते हुये।
  • ऑब्जेक्ट को पर्यवेक्षक के रूप में हटा रहा है।
  • पर्यवेक्षक के रूप में पंजीकरण नहीं कर रहा है।
  • गलत अधिसूचना के लिए पंजीकरण या गलत अधिसूचना पोस्ट करना।

मैं खुशी से कह सकता हूं कि मुझे यकीन है कि इनमें से कोई भी नहीं हो रहा है। मुझे लगता है कि सबसे अधिक संभावना यह है कि वस्तु किसी बिंदु पर निरस्त और पुनर्निर्मित की जा रही है, लेकिन यह प्रारंभिकरण पर अधिसूचना के लिए पंजीकृत है।

यहाँ है जहाँ मैं रजिस्टर:

/** 
* initialises an object with a unique file url 
* 
* @param url       the url to set as the file url 
*/ 
- (id)initWithFileURL:(NSURL *)url 
{ 
    if (self = [super initWithFileURL:url]) 
    { 
     self.entries     = [[NSMutableArray alloc] init]; 

     // we want to be notified when a note has changed 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(noteChanged) 
                name:@"com.andbeyond.jamesvalaitis.notesChanged" 
                object:self]; 

     NSLog(@"Just registered for 'com.andbeyond.jamesvalaitis.notesChanged'"); 
    } 

    return self; 
} 

वह स्थान है जहां मैं सूचना पोस्ट:

/** 
* called when a note has changed 
*/ 
- (void)noteChanged:(NSNotification *)notification 
{ 
    NSLog(@"Just received for 'com.andbeyond.jamesvalaitis.notesChanged'"); 

    // save the notes 
    [self saveToURL:self.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) 
    { 
     if (success) 
      NSLog(@"Note updated."); 
    }]; 
} 

यह:

/** 
* save the note content 
*/ 
- (void)saveNote 
{ 
    if (_isChanged) 
    { 
     // save to the text view to the note's contents 
     self.note.noteContent   = self.noteView.text; 

     // post a notification that we changed the notes 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"com.andbeyond.jamesvalaitis.notesChanged" object:nil]; 

     NSLog(@"Just posted 'com.andbeyond.jamesvalaitis.notesChanged'"); 

     // make sure we know it's already saved 
     _isChanged       = NO; 
    } 
} 

इस विधि की जाती है कि कहा जाता है नहीं किया जा रहा है कंसोल यह स्पष्ट करता है कि मैं दोनों पंजीकरण और अधिसूचना पोस्ट करता हूं:

2012-11-15 13: 27: 50.958 iCloud कस्टम [11,269: 907] बस के लिए पंजीकृत 'com.andbeyond.jamesvalaitis.notesChanged'

2012-11-15 13: 28: 24.184 iCloud कस्टम [11,269: 907] बस 'com.andbeyond.jamesvalaitis.notesChanged'

The whole project can be found here.

+1

नोट जोड़ें पोस्ट के लिए चेंज विधि ... – chrislhardin

+0

आपका चयनकर्ता अभी भी इस @ चयनकर्ता (नोट चेंज किया गया) जैसा है .. फिर यह इसे कैसे कॉल करेगा - (शून्य) नोट चेंज: (NSNotification *) अधिसूचना ??? आपको अपने चयनकर्ता को इस @ सेलेक्टर (नोट चेंज किया गया :) –

+0

@ दिनेशराज: हाय दिनेश और जेम्स, मुझे एक समान समस्या का सामना करना पड़ रहा है और इस पोस्ट पर सभी उत्तरों के माध्यम से सुझावों को लागू करने की आवश्यकता है; अभी भी चीजें मेरे लिए काम नहीं किया है। मैं अधिसूचना सफलतापूर्वक पोस्ट करने और पर्यवेक्षक को भी घोषित करने में सक्षम हूं। लेकिन तर्क जहां चेक किया जाता है उसे निष्पादित नहीं किया जाता है। मुझे कोड कैसे साझा करना चाहिए? या मुझे एक डुप्लिकेट प्रश्न पोस्ट करना चाहिए? –

उत्तर

19

मुझे लगता है कि मैं इस सवाल का जवाब पता लगा है। आप फ़ाइल में NotesDocument.m नाम की अधिसूचना बना रहे हैं। तो जब आप एक पर्यवेक्षक बनाते हैं, तो आप ऑब्जेक्ट को self के रूप में सेट करते हैं। इसका मतलब है नोट्स डॉक्यूमेंट ऑब्जेक्ट। लेकिन जब आप post the notification, तो आप ऑब्जेक्ट को nil के रूप में भेज रहे हैं। तो दस्तावेज के अनुसार it wont observe the notificationइस पर काबू पाने का आसान तरीका आपको अधिसूचना बनाते समय ऑब्जेक्ट को nil के रूप में सेट करने की आवश्यकता है। अन्यथा आपको NotesDocument Object पास करने की आवश्यकता है।

अधिसूचना के addObserver विधि के लिए नीचे दी गई छवि और पैरामीटर विवरण देखें।

enter image description here

जांच notificationSender पैरामीटर।जिस ऑब्जेक्ट की पर्यवेक्षक पर्यवेक्षक प्राप्त करना चाहता है; यानी, इस प्रेषक द्वारा भेजी गई केवल सूचनाएं पर्यवेक्षक को दी जाती हैं।

+0

मैं क्या बेवकूफ रहा हूँ। जब मैंने अधिसूचना के लिए पंजीकरण किया तो मैं पूरी तरह से वस्तु को स्वयं के रूप में सेट करने का मतलब नहीं था। यह अब पूरी तरह से काम करता है। आपको बहुत बहुत धन्यवाद। –

+0

मेरे पास अभी भी एक ही समस्या थी, और मुझे विश्वास नहीं है कि मुझे जवाब बहुत जल्दी मिला। यह इतनी छोटी बात है; अनदेखा करना और स्पॉट करना इतना मुश्किल है। आपका बहुत बहुत धन्यवाद। – halfwaythru

+0

लगभग 20 मिनट सोचने में बिताए कि मेरे पास पर्यवेक्षक की वस्तु के रूप में 'शून्य' था, और यह 'स्वयं' था। इस पोस्ट के लिए मुझे यह देखने के लिए धन्यवाद कि मुझे गुलाबी रंग की संपत्ति को सही होने की क्या उम्मीद है। :) – kyleturner

-5

fallowing यूआरएल आपकी समस्या का समाधान होगा तैनात।

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_nsnotificationcenter

+0

मैंने NSNotificationCenter का बहुत उपयोग किया है और इसे लागू करने की प्रक्रिया से अवगत हूं। आप मानते हैं कि आपका लिंक मेरी मदद करेगा, काफी सम्मानजनक है, लेकिन दुख की बात है। –

0

बदलें निम्नलिखित:

... 
selector:@selector(noteChanged:) 

... 
- (void) noteChanged:(NSNotification *) notification 
... 
+0

बस यह परिवर्तन किया, और यह काम नहीं किया। वैसे भी धन्यवाद। –

+0

अधिसूचना के लिए एक अलग स्ट्रिंग के बजाय दोनों स्थानों में एक स्थिर स्ट्रिंग का उपयोग करने का प्रयास करें। वे बिल्कुल वही दिखते हैं, लेकिन कुछ अजीब हो सकता है। – chrislhardin

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