2011-12-17 7 views
8

एआरसी के तहत इस कोड के साथ क्या गलत है?एआरसी त्रुटि: init विधियों को रिसीवर प्रकार से संबंधित एक प्रकार वापस करना होगा [4]

- (Moment *)initMoment:(BOOL)insert { 

if (insert) { 
    self.moment = [NSEntityDescription insertNewObjectForEntityForName:@"Moment" inManagedObjectContext:self.managedObjectContext]; 
    } else { 
    self.moment = [NSEntityDescription insertNewObjectForEntityForName:@"Moment" inManagedObjectContext:nil]; 
    } 
return self.moment; 
} 
+1

मैं यहां आपके लक्ष्य से उलझन में हूं ... आपका कार्य 'क्षण' में होना चाहिए, इसलिए इसे 'क्षण' स्थापित करना चाहिए और 'स्वयं' वापस करना चाहिए। आप यहां क्या कर रहे हैं एक प्रबंधित ऑब्जेक्ट मॉडल में कुछ जोड़ने के वापसी मूल्य के साथ 'self.moment' प्रॉपर्टी सेट कर रहा है ... –

+0

मैं किसी और के कोड का उपयोग करता हूं (शायद ऐसा नहीं करना चाहिए)। लेकिन मैंने "क्षण * पल और" वापसी पल भी कोशिश की; "मुझे एक ही कंपाइलर त्रुटि मिलती है। – Chrizzz

+3

दाएं, लेकिन आम तौर पर एक init '- (id) initWithInsert: (BOOL) के रूप में कुछ है {if (self = [सुपर init]) {// setup} वापस लौटें} '। जब आप' पल वापस 'करते हैं तो आप वहां कुछ ऐसा नहीं कर रहे हैं जो वहां नहीं है। –

उत्तर

9

init विधि है कि प्रश्न में पोस्ट किया गया था गलत रूप में था: मैं ऊपर त्रुटि मिलती है। init विधि चाहिए (आमतौर पर) रूप है:

-(id)initWithParams:(BOOL)aBoolParam { 
    if (self = [super init]) { 
     //do stuff 
    } 
    return self; 
} 

कोड के साथ समस्या यह ऊपर था कि यह एक वर्ग पद्धति के रूप में किया गया था, इसलिए यदि पोस्टर इस करना चाहता था वह moment = [[Moment alloc] init] करते हैं और इसे लौटना पड़ा।

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