2012-01-04 9 views
6

को हटाना चाहती हैं मैंने ब्लूटूथ संचार का परीक्षण करने के लिए एक ऐप की कोशिश की। यह एक साधारण ऐप है जो सिर्फ एक iDevice से दूसरे में टेक्स्ट फॉर्म में एक संदेश भेजता है। मूल रूप से, इस ऐप में लगभग 6 चेतावनियां थीं लेकिन मैंने सभी को दो लेकिन तय कर दिया। वे वही हैं लेकिन विभिन्न प्रतिनिधियों से निपटते हैं। एक GKPeerPickerControllerDelegate के लिए है और दूसरा GKSessionDelegate के लिए है।कुछ परेशान चेतावनियां जो अभी भी ऐप को काम करने देती हैं लेकिन

picker.delegate = self; 

संकलक का कहना है:: पिकर त्रुटि, GKPeerPickerController नामित पिकर के लिए है जब आप (पालन करने के लिए और अधिक पूर्ण उदाहरण) टाइप कहो

पासिंग '* स्थिरांक ___ मजबूत' असंगत प्रकार के पैरामीटर के लिए ' आईडी '।

GKSession नामित सत्र के लिए, टाइपिंग

session.delegate = self; 

संकलक बनाता है कहते हैं:

भेजा जा रहा है असंगत प्रकार 'आईडी' के पैरामीटर के लिए '* स्थिरांक ___ मजबूत'।

ये केवल भेजने और peerPickerController को बटन में पॉप करते हैं। मुझे पता है कि ये चेतावनियां ऐप की कार्य करने की क्षमता में बाधा नहीं डालती हैं, लेकिन मैं इसे एक्सकोड 4.2 के लिए पूरी तरह अद्यतन करना चाहता हूं। आईओएस 3.0 नया था जब यह ऐप मूल रूप से एक्सकोड के लिए लिखा गया था। हां, जब कोड लिखने या अभ्यास करने की बात आती है, तो मैं थोड़ा चुनौतीपूर्ण हूं, जब भी संभव हो, इसमें कोई त्रुटि/चेतावनियां नहीं होनी चाहिए।

-(IBAction)btnConnect:(id)sender{ 
    picker = [[GKPeerPickerController alloc] init]; 
    picker.delegate = self; //Warning here 
    picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby; 

    [connect setHidden:YES]; 
    [disconnect setHidden:NO]; 
    [picker show]; 
} 

-(void)peerPickerController:(GKPeerPickerController *)PCpicker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session{ 
    self.currentSession = session; 
    session.delegate = self; //Warning here 
    [session setDataReceiveHandler:self withContext:nil]; 
    PCpicker.delegate = nil; 

    [PCpicker dismiss]; 
} 

संपादित करें::

हेडर कुछ इस है:

@interface BTViewController : UIViewController{ 
GKSession *currentSession; 
IBOutlet UITextField *txtMessage; 
IBOutlet UIButton *connect; 
IBOutlet UIButton *disconnect; 

GKPeerPickerController *picker; 

}

+1

+1:

उन प्रोटोकॉल को अपनाने के लिए अपने इंटरफेस को संशोधित! –

+0

धन्यवाद, मैं हमेशा यह सुनिश्चित करने की कोशिश करता हूं कि जो भी मैं लिखता हूं उसे कोई समस्या नहीं है। आईओएस के लिए प्रोग्रामिंग विंडोज से अलग है, जो मैं काम के लिए भी करता हूं। –

+0

कोड जो '-Wall' के साथ साफ करता है हमेशा अन्यथा की तुलना में कम समस्याएं होती है। –

उत्तर

5

मेरा मानना ​​है कि जो भी वर्ग selfGKPeerPickerControllerDelegate और GKSessionDelegate औपचारिक प्रोटोकॉल को अपनाने वाला नहीं हो सकता है। क्या आप अपना इंटरफेस हेडर पोस्ट कर सकते हैं?

संपादित

आईडी पर कास्टिंग चेतावनी साफ हो जाएगा, लेकिन आप वास्तव में कुछ नहीं "ठीक" था ...कक्षा शीर्षलेख को देखते हुए, यह प्रोटोकॉल को अपनाने वाला नहीं है जो प्रतिनिधि उम्मीद कर रहे हैं। हर अंतिम ** चेतावनी हटाने की कोशिश कर ** के लिए

@interface BTViewController : UIViewController <GKPeerPickerControllerDelegate, GKSessionDelegate> { 
+0

मैंने संपादित किया है, मैंने –

+0

के लिए हेडर जोड़ा है यदि संभव हो, तो यह औपचारिक प्रोटोकॉल कैसे अपनाएगा? आईओएस के लिए प्रोग्रामिंग के बारे में और समझने में यह मददगार होगा। –

+0

मेरा उत्तर आपको दिखाता है कि आपकी कक्षा में प्रोटोकॉल कैसे जोड़ें। मैं प्रोटोकॉल को आगे समझने के लिए ऐप्पल की मार्गदर्शिका पढ़ने की सलाह देता हूं - http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html –

3

session.delegate = (id)self के बारे में क्या

ये कोड ब्लॉक जहां चेतावनी पाए जाते हैं। हो सकता है कि आपको केवल const____strong के बजाय आईडी के रूप में स्वयं को डालने की आवश्यकता हो।

संपादित करें: ओपी की इच्छा पर, एक स्पष्टीकरण क्रम में है। प्रोटोकॉल के लिए टाइप आईडी आवश्यक है, क्योंकि प्रोटोकॉल स्वयं ही सचमुच आईडी को टाइपकास्ट करता है (id<GKSessionDelegate> इत्यादि)। मेरा सिद्धांत (क्योंकि मैं अपनी किसी भी परियोजना में एआरसी का उपयोग नहीं कर रहा हूं) यह है कि संकलक बहुत सटीक हो जाता है ताकि यह गारंटी दे सके कि आपकी कक्षा रिलीज के लिए सुरक्षित है। आपने शायद अपनी कक्षा को एक गैर-आईडी तरीके से शुरू किया है ... बेशक मुझे नहीं पता कि कैसे, अगर कोई जानता है; मुझे उन्हें इस जवाब को संपादित करने में खुशी होगी।

संपादित करें 2: टेडी ने कहा है कि, आपके हेडर फ़ाइल में प्रोटोकॉल को अपनाने से यह चेतावनी भी शांत हो जाती है। मैं सोचने के लिए क्षमा चाहता हूं कि यह निहित था कि आपने प्रोटोकॉल को अपनाया था।

+1

उसने चेतावनियों को साफ़ किया। धन्यवाद। क्या आप आईडी बनाम const___strong बना सकते हैं? –

+0

मुझे नहीं लगता कि यह उत्तर सही ढंग से चेतावनी को ठीक करता है ... कृपया मेरा उत्तर देखें। –

+0

रेड्डी, वह एआरसी का उपयोग कर रहा है। एआरसी में, उनकी कक्षा शायद संभवतः (nonatomic, मजबूत) के रूप में तत्काल था। टाइपकास्ट कैसे ठीक नहीं करेगा? और मुझे लगता है कि यह काफी स्पष्ट था कि वह पहले से ही प्रोटोकॉल के अनुरूप होगा। – CodaFi

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