/ / उद्देश्य-सी में असंबंधित वस्तु के साथ शब्दार्थ का मुद्दा - उद्देश्य-सी, आईओएस, यूविओकंट्रोलर

उद्देश्य-सी - उद्देश्य-सी, आईओएस, uiviewcontroller में असंबंधित वस्तु के साथ अर्थपूर्ण मुद्दा

मेरे पास एक 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];