2010-10-08 12 views
5

निम्नलिखित कोड:एनएससींट्रोल सबक्लास लक्ष्य को नहीं पढ़ सकता है?

anObject: <DropZoneViewController: 0x15dd5770> 
Target: (null) 

यह NSControl का एक उपवर्ग में है:

- (void) setTarget:(id)anObject { 
    NSLog(@"anObject: %@",anObject); 
    [super setTarget:anObject]; 
    NSLog(@"Target: %@",[self target]); 
} 

इस उत्पादन है। तो मैं क्या गलत हूं?

जो मैं प्राप्त करने की कोशिश कर रहा हूं: मेरे पास एक NScontrol है जो वस्तुओं को खींचने को स्वीकार करता है। जब ड्रैगिंग समाप्त होता है, तो मैं नियंत्रण के क्रिया को अपने लक्ष्य में भेजना चाहता हूं। लेकिन अगर यह ऊपर काम नहीं करता है तो मैं नियंत्रण की कार्रवाई & लक्ष्य कैसे प्राप्त करूं?

उत्तर

13

NSControl अपने स्वयं के लक्ष्य को संग्रहीत नहीं करता है, यही वह सेल है जो इसे करना है।

तो वहाँ दो कारणों से इस असफल हो सकता है कर रहे हैं:

  1. आपका नियंत्रण एक सेल
    इस मामले तुम सच में NSActionCell का एक उपवर्ग अपने नियंत्रण लागू करने के लिए बनाने चाहिए में नहीं है। NSControl के आपके उप-वर्ग को सेल सेट अप करने के अलावा बहुत कुछ नहीं करना चाहिए।
    यदि आप NSCell का उपयोग करके इसे सही तरीके से नहीं करना चाहते हैं तो आपको लक्ष्य और क्रिया को संग्रहीत करने के लिए अपने NSControl सबक्लास में इंस्टेंस चर जोड़ना होगा और उन्हें उपयोग करने के लिए गेटर्स और सेटर्स को ओवरराइड करना होगा।

  2. आपका सेल NSActionCell का उप-वर्ग नहीं है। एक नियमित NSCell या तो लक्ष्य को संग्रहीत नहीं करता है।
    यदि आप एक कस्टम सेल का उपयोग कर रहे हैं जो NSActionCell का सबक्लास नहीं है तो बस इसे बदलें ताकि NSCell के बजाय NSActionCell से प्राप्त हो। यदि आप ऐसा नहीं कर सकते हैं (उदाहरण के लिए क्योंकि आप NSCell सबक्लास को उपclassing कर रहे हैं, तो आप बदल नहीं सकते हैं) आपको अपने सेल क्लास में लक्ष्य और चयनकर्ता के लिए आवृत्ति चर जोड़ना होगा और इसके सेटर्स और गेटर्स को ओवरराइड करना होगा।

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