سؤال

وأنا إنشاء مشروع بسيط لفون، وذلك باستخدام كسكودي واجهة البناء. بينما أنا أفهم ما هو مندوب، لدي مشكلة مع استخدامه.

ولدي UITextField في واجهة بلدي. فإنه يعرض لوحة المفاتيح عندما ينقر المستخدم على ذلك، ولكن أنا بحاجة لبرنامج يدويا كيفية إخفاء لوحة المفاتيح. ويمكن أن يتم ذلك باستخدام المندوبين. حتى في IB، أنا أخذ كائن من مكتبة، وإعطاء عليه اسم الفئة كما Control1Delegate ثم ربط منفذ مندوب من وجهة نظري حيز النص أن يكون هذا Control1Delegate. ولدي أيضا. م والملفات .H لهذه الفئة Control1Delegate:

وControl1Delegate.h

@interface Control1Delegate : NSObject <UITextFieldDelegate> {
}

- (BOOL) textFieldShouldReturn:(UITextField *)textField;

@end

وControl1Delegate.m

#import "Control1Delegate.h"

@implementation Control1Delegate

- (BOOL) textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

@end

ولكن هذا لا يعمل. عند تشغيل، فإنه فقط لا يصل إلى طريقة textFieldShouldReturn أو تعطل بدون جي اس أو مع EXEC_BAD_ACCESS. الشيء المضحك هو أنني عندما نقل الأسلوب في ملف وحدة تحكم (معالج واحد وقد ولدت) والاتصال من UITextField إلى وحدة تحكم (مالك ملف)، ويعمل كل شيء كما هو متوقع. رأيت أن معظم كود التفاح تعليمي يضع أساليب المفوضة إلى الأشياء العشوائية الدرجة بدلا من منفصلة - وأود أن أعرف لماذا. لا يمكن أن لدي المفوض في فئة منفصلة؟

وماذا أنا في عداد المفقودين هنا؟ بعض مؤشر فارغة؟ الكائن livecycle؟

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

المحلول

ويتم الحصول على تدمير الكائن Control1Delegate لديك قريبا بعد إنشائه. يجب أن يتم الاحتفاظ كافة الكائنات المنقار المستوى الأعلى إذا كنت تريد أن تبقي على قيد الحياة. الرجوع إلى دليل البرمجة الموارد: كائن المنقار دورة الحياة .

ومالك الملف يمكن أن يكون خاصية من هذا القبيل، من أجل الحفاظ على وجوه:

@property (nonatomic, retain) IBOutlet Control1Delegate *control1delegate;

وتذكر لتحرير الكائن بعد لم يعد هناك حاجة إليها.

نصائح أخرى

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

وأما لماذا انها تحطمها، يبدو وكأنه كنت تريد أن تجعل من الخطأ مع إدارة الذاكرة في مكان آخر في التطبيق الخاص بك. يمكنك استخدام المصحح لتعقب بالضبط حيث انها قادمة من.

وشكرا لكم على حد سواء. ليس فقط أنا أعرف الآن كيفية حل مشكلتي، ولكن أيضا فهم أخيرا كيف يتم الاحتفاظ الكائنات في عملية إنشاء بنك الاستثمار القومي. انها ليست كافية لخلق كائن في IB، لو كان الكيان الجديد، فإنه يجب أن تكون متصلا ايفار الحقيقي في مالك الملف (مع synthetised صحيح جالبة / اضع).

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