باستخدام طريقة ibacte عندما لا يتم استدعاؤها من إجراء؟

StackOverflow https://stackoverflow.com/questions/3027065

سؤال

هل هناك أي مشكلات عند استخدام Ibacte عندما لا يتم استدعاؤها فعليًا من إجراء المستخدم؟

إذا كان لديك عمل مثل

-(IBAction)sayHello:(id)sender;

يمكنك تسميتها من داخل الفصل مثل:

[self sayHello:@"x"]

@"X" لا يفعل أي شيء ، فهو يملأ فقط للمرسل.

يمكنك بالفعل إنشاء طريقة ibacte بدون مرسل (معرف)

-(IBAction)sayHello;

واتصل به من إجراءات المستخدمين ومن داخل الكود ، ولكن بعد ذلك لن تحصل على أي معلومات مرسل مفيدة من الواجهة. ما هي الطريقة "الصحيحة" لملء المرسل ، عند الاتصال من الكود؟ وهل يمكنك إنشاء معلومات المرسل لإرسالها عندما يتم استدعاؤها من داخل الرمز؟

مجرد محاولة لمعرفة ذلك.

هل كانت مفيدة؟

المحلول

أعتقد أن الممارسة الجيدة لـ OOP هي الانكسار -(Ibacte) Sayhello: (ID) Sender ؛

إلى طريقة أخرى تسمى: -(void) Sayhello ؛ وداخل الطريقة -(Ibacte) Sayhello: (id) Sender {[Self Sayhello] ؛ }

إذا كانت الأساليب الأخرى تريد الاتصال بـ Sayhello: (ID) إجراء المرسل للقيام ببعض الوظائف ، فيمكنه استدعاء Sayhello. يجب أن يكون اسم الطريقة منطقيًا على العميل أن يتصل به دون مشكلة أو العمل. سيساعدك ذلك عندما تضطر إلى الاختبار أو التصحيح

نصائح أخرى

يجب أن يكون المرسل مكون واجهة المستخدم. لذلك إذا كان لديك في صفك ، على سبيل المثال ، Uibultdon ...

UIButton *button;

ثم يمكنك فقط إرسالها كمعلمة إلى الإجراء:

[self sayHello:button];

من الداخل الطريقة ، بغض النظر عما إذا كانت تسمى من واجهة المستخدم أو بطريقة محاكاة ، يمكنك الحصول على بعض المنطق لاكتشاف من هو المرسل ، والتصرف بشكل مختلف بناءً على ذلك. وبهذه الطريقة ، يمكن لأزرار متعددة أو مكونات أخرى إعادة استخدام طريقة الإجراء نفسها.

إلا إذا كنت تستفيد بالفعل من sender المعلمة (انظر إجابة Jaanus للمزيد على ذلك) ، أنت بخير مع المرور nil لذلك عند استدعاء الطريقة من الكود.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top