आपका भ्रम इस तथ्य से उपजा है कि घोषित गुण (आवश्यक रूप से उसी के नाम पर) (उदाहरण) चर नहीं हैं।
उघाड़ना
indexPath.row
के बराबर है
[indexPath row]
और असाइनमेंट
delegate.myData = [myData objectAtIndex:indexPath.row];
के बराबर है
[delegate setMyData:[myData objectAtIndex:[indexPath row]]];
संश्लेषित गुणों के लिए मानक नामकरण।
इसके अलावा, delegate
संभवतः प्रकार के रूप में घोषित किया जाता है id<SomeProtocol>
, अर्थात, कंपाइलर delegate
उस बिंदु पर वास्तविक प्रकार की जानकारी प्रदान करने में सक्षम नहीं है , और डिबगर संकलन-समय पर प्रदान की गई जानकारी पर निर्भर है। चूंकि id
एक सामान्य प्रकार है, उदाहरण में चर के बारे में कोई संकलन-समय की जानकारी नहीं है delegate
।
उन कारणों से आप नहीं दिख रहे हैं myData
या row
चर के रूप में।
यदि आप भेजने के परिणाम का निरीक्षण करना चाहते हैं -row
या -myData
, आप कमांड का उपयोग कर सकते हैं p
या po
:
p (NSInteger)[indexPath row]
po [delegate myData]
या अभिव्यक्ति विंडो का उपयोग करें (उदाहरण के लिए, यदि आप जानते हैं कि आपका delegate
वास्तविक प्रकार है MyClass *
, तो आप एक अभिव्यक्ति जोड़ सकते हैं (MyClass *)delegate
, या राइट-क्लिक कर सकते हैं delegate
, View Value as…
और वास्तविक प्रकार delegate
(जैसे MyClass *
) टाइप कर सकते हैं ।
कहा जा रहा है, मैं सहमत हूं कि डिबगर अधिक मददगार हो सकता है:
संकलन-समय की जानकारी के बजाय रन-टाइम प्रकार की जानकारी का उपयोग करने के लिए डिबगर विंडो को बताने का विकल्प हो सकता है। यह डिबगर को धीमा कर देगा, प्रदान किया जाएगा, लेकिन उपयोगी जानकारी प्रदान करेगा;
घोषित संपत्तियों को एक समूह में दिखाया जा सकता है जिसे गुण कहा जाता है और डिबगर विंडो में सीधे (वैकल्पिक) निरीक्षण की अनुमति देता है। यह भी डीबगर को धीमा कर देगा क्योंकि संदेश भेजने / जानकारी प्राप्त करने के लिए एक विधि को निष्पादित करने की आवश्यकता है, लेकिन उपयोगी जानकारी भी प्रदान करेगा।