मेरे पास एक UIViewController
उपवर्ग जो किसी संदेश को एक कस्टम मॉडल के साथ नियंत्रक में लागू करता है:
- (id)initWithUser:(FacebookFriend *)user;
जब मैं अपने नियंत्रक को इनिट का उपयोग करता हूं:
ProfileViewController *profileViewController = [[ProfileViewController alloc] initWithUser:friend];
संकलक को संदेश भेजने की शिकायत करता है NSUserDefaults
"एक ही नाम का संदेश:
- (id)initWithUser:(NSString *)username;
warning: incompatible Objective-C types "struct FacebookFriend *", expected "struct NSString *" when passing argument 1 of "initWithUser:" from distinct Objective-C type
मैं डॉन 'टी काफी समझ क्यों यह मुझे के रूप में यह मुझे सूचित नहीं करता है "मैं नहीं सोचता UIViewController
से विरासत NSUserDefaults
कहीं भी। क्या इस त्रुटि को अक्षम करने का कोई तरीका है? क्या इससे समस्या हो सकती है? क्या मुझे भ्रम से बचने के लिए सिर्फ अपने वर्ग "इनिशियलाइज़र" का नाम बदलना चाहिए?
उत्तर:
जवाब के लिए 2 № 1समस्या यह है कि आपके पास एक अस्पष्ट चयनकर्ता है। इसलिये alloc
जेनेरिक लौटाता है (ऑब्जेक्टिव सी के लिए) टाइप id
के लिए कॉल करें initWithUser:
अस्पष्ट हो गया है, और इसलिए यह भ्रमित हो जाता है NSUserDefaults
तरीका initWithUser:
। संकलक आपको लगता है कि "उस एक का उपयोग करने की कोशिश कर रहा है।
आप कास्टिंग द्वारा अस्पष्टता को दूर कर सकते हैं:
ProfileViewController *profileViewController = [(ProfileViewController*)[ProfileViewController alloc] initWithUser:friend];
उत्तर № 2 के लिए 1
क्या आपने सीधे परिणाम डालने का प्रयास किया है -alloc
? कुछ इस तरह:
ProfileViewController *profileViewController = [(ProfileViewController *)[ProfileViewController alloc] initWithUser:friend];