2010-07-31 10 views
17

मैं कुछ गुणों के साथ एक प्रोटोकॉल को परिभाषित और एक अन्य NSObject उपवर्ग में उन गुणों का उपयोग करने की जरूरत है चाहता हूँ में गुण लागू करने के लिए कैसे। कृपया मुझे लिंक या उदाहरण कोड दें। मुझे 10.5 के साथ काम करने की ज़रूरत है।को परिभाषित करने और प्रोटोकॉल

धन्यवाद कृपया निम्न नमूना कोड

@protocol MyProtocol 
@property (nonatomic, readonly) id someObject; 
@property (nonatomic, getter=isAlive) BOOL alive; 
@end 

#import "MyProtocol.h" 
@interface MyCustomClass : NSObject <MyProtocol>{ 

} 
@end 

#import "MyCustomClass.h" 
@implementation MyCustomClass 
@synthesize someObject,alive; 

/* 
- (id)someObject { 
    return nil; 
} 

- (BOOL)isAlive { 
    return YES; 
} 

- (void)setAlive:(BOOL)aBOOL { 
} 
*/ 
@end 

** जोड़ा गया: x86_64 आर्किटेक्चर के साथ compling कोड ठीक काम करता है। ।

MyCustomClass.m:13: error: synthesized property 'someObject' must either be named the same as a compatible ivar or must explicitly name an ivar 

error: synthesized property 'alive' must either be named the same as a compatible ivar or must explicitly name an ivar 

मैं सिर्फ जानना चाहता है कि यह @synthesize साथ x86_64 में और i386 में नहीं काम कर रहा है चाहता हूँ **

उत्तर

33
: लेकिन त्रुटि अगर मैं i386 के लिए वास्तुकला बदल देंगे, तो मैं निम्नलिखित चेतावनी हो रही है

@property सिर्फ संकलक कि वर्ग है कि संपत्ति से मिलान करने के तरीकों को परिभाषित करने की उम्मीद है करने के लिए कहते हैं।

@protocol MyProtocol 
@property (nonatomic, readonly) id someObject; 
@property (nonatomic, getter=isAlive) BOOL alive; 
@end 

कोई भी चीज जो प्रोटोकॉल को लागू अब

- (id)someObject; 
- (BOOL)isAlive; 
- (void)setAlive:(BOOL)aBOOL; 
+9

Synthesizing के बाद से यह संकलक एक्सेसर विधि कार्यान्वयन की आपूर्ति करने का निर्देश गुणों के साथ-काम करना चाहिए,। –

+0

धन्यवाद, आपका प्रदत्त कोड पूरी तरह से काम करता है, अगर मैं प्रोजेक्ट आर्किटेक्चर को x86_64 पर रखता हूं। यदि मैं आर्किटेक्चर को i386 में बदलता हूं तो मुझे निम्नलिखित चेतावनियां मिल रही हैं: MyCustomClass.m: 13: त्रुटि: संश्लेषित संपत्ति 'someObject' को या तो संगत ivar के समान नाम दिया जाना चाहिए या स्पष्ट रूप से ivar त्रुटि का नाम होना चाहिए: संश्लेषित संपत्ति 'जिंदा' या तो एक संगत इवर रूप में एक ही नामित किया जाना चाहिए या स्पष्ट रूप से एक इवर मैं सिर्फ जानना चाहता है कि यह @synthesize साथ x86_64 में i386 में नहीं काम कर रहा है और चाहता हूँ नाम देना होगा। धन्यवाद – AmitSri

+0

मैं यदि संभव हो तो कम कोड लिखने की कोशिश कर रहा हूँ। कृपया मुझे यह भी समझाएं कि विभिन्न आर्किटेक्चर के बीच क्या अंतर है और मुझे लगता है कि एप्लिकेशन को संकलित करने के लिए कौन सा चयन करना है। – AmitSri

1

मुझे लगता है कि चीजें आप साथ काम कर रहे Objective-C 2.0 की शुरूआत के लिए मुख्य रूप से दुष्प्रभाव होते हैं की आवश्यकता होगी। यह आपको चीजों को उदाहरण के घोड़ों को परिभाषित किए बिना घोषित करने की सुविधा देता है। लेकिन (जैसा कि आपने पाया है), यह केवल x86_64 और 10.5 के बाद संगत है।

+0

मुझे एक ही त्रुटि है। मैंने x86_64 के लिए "केवल सक्रिय आर्किटेक्चर बनाया" बॉक्स चेक किया। यह तय है। – user523234

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