2011-11-25 6 views
7

मैं एआरसी के लिए नया हूं, और मेरे पास एक वस्तु है जिसमें सदस्यों के रूप में कुछ आंतरिक वर्ग हैं। Init विधि पर मैं उनके लिए नई वस्तुओं को आवंटित करना चाहता हूं।मैं आवंटित नहीं कर सकता/init - "असुरक्षित संपत्ति को बनाए रखने वाले ऑब्जेक्ट को असाइन करना" चेतावनी प्राप्त करें?

ClassA.h

#import "ClassB.h" 
@interface ClassA : NSObject 
@property (assign) ClassB *member; 
@end 

ClassB.h

@interface ClassB : NSObject 
@property (assign) NSString *name; 
@end 

ClassA.m

@synthesize member = _member; 
-(id)init 
{ 
    _member = [[ClassB alloc] init]; 
} 

लेकिन मैं त्रुटियों "असुरक्षित संपत्ति को बनाए रखा वस्तु नियत" मिलता है। मैंने अंतर जाल पर खोज की, और इस विशिष्ट चेतावनी पर कोई अन्य जानकारी नहीं देखी। यह संकलित करता है, लेकिन रनटाइम खराब पहुंच अपवाद प्राप्त करता है।

+3

कृपया अपने इंस्टेंस चर के साथ .h फ़ाइल पोस्ट करें। आपका कोड अधूरा है। – futureelite7

+2

मुझे तब तक एक ही समस्या थी जब तक कि मैंने "एट" संपत्ति (असाइन) को "एट" संपत्ति (मजबूत, nonatomic) –

उत्तर

12

तात्कालिक समस्या आप बताए रहे हैं कि किसी सदस्य को वस्तु के रूप में चिह्नित weak, जिसका मतलब है कि वस्तु एक मजबूत संदर्भ की जरूरत नहीं होगी और तुरंत पुनः आवंटित की जाती हो जाएगा। weak या assign के बजाय strong या retain का उपयोग करना ठीक करेगा।

आपकी -init विधि के साथ एक बड़ी समस्या यह है कि यह [super init] पर कॉल नहीं करता है, और यह कुछ भी वापस नहीं करता है। कम से कम, आपके -init को इस तरह दिखना चाहिए:

-(id)init 
{ 
    self = [super init]; 
    if (self != nil) { 
     self.member = [[ClassB alloc] init]; 
    } 
    return self; 
} 
+1

में बदल दिया, धन्यवाद, मैंने [सुपर इनिट] को ब्रेवटी के लिए बाहर रखा, लेकिन पूर्णता के लिए आप सही हैं। और स्पष्टीकरण के लिए धन्यवाद, मुझे पता है कि क्यों आईबीओलेट कमजोर हैं, और xib के बाहर सदस्य ऑब्जेक्ट्स मजबूत होने की आवश्यकता है। –

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