سؤال

انا مستجد فون برمجة, لقد واجهت استثناء التي القيت أن أنا فقط لا أستطيع أن أحدد.

الخلفية:الخطأ يحدث في العرف subview ، ويحدث فور تحميل البرنامج.أنا على الحصول على استثناء طرح في تجاوز drawRect الأسلوب.رمز رمي الخطأ على النحو التالي:

- (void)drawRect:(CGRect)rect{
    NSNumber *points = [NSNumber numberWithInt: star.numberOfPoints];
    //HERE. Doesn't recognize selector?!
    CGPathRef t = (CGPathRef)[starPaths objectForKey:points];
 /*snip*/

starPaths تهيئة في awakeFromNib كما NSMutableDictionary مع القدرة 1.

الاستثناء من ذلك هو الحصول على القيت هو -[NSObject doesNotRecognizeSelector:]

starPaths أعلن في رأس ملف عرض

    NSMutableDictionary *starPaths;

و هو تهيئة كما

- (void)awakeFromNib{
    starPaths = [NSMutableDictionary dictionaryWithCapacity: 1];
} 

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

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

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

المحلول

إذا كنت لا retain المتغير starPaths أو صراحة تحيله نفسك مع [[NSMutableDictionary alloc] initWithCapacity:1] بعد ذلك سوف يتم الافراج تلقائيا على التكرار التالي من حلقة التشغيل.

ما عليك القيام به

starPaths = [[NSMutableDictionary dictionaryWithCapacity:1] retain];

أو

starPaths = [[NSMutableDictionary alloc] initWithCapacity:1];

وفقط للتأكد من release عندما لم تعد في حاجة إليها.

نصائح أخرى

عدد قليل من الأشياء للتحقق:

  • هو starPaths أعلنت على أنها NSMutableDictionary* سبيل المثال متغير ؟ تذكر أنه يتم تهيئة.هل استخدام dictionaryWithCapacity طريقة (والتي ترجع لصناعة السيارات إطلاق كائن) أو initWithCapacity (الذي يحتاج إلى صراحة الاحتفاظ بها).أن تكون آمنة ، قد ترغب في الاحتفاظ بها والإفراج عنها عند القيام به.

  • انقر نقرا مزدوجا تحقق للتأكد من رأس الملفات بشكل صحيح شملت حتى إعلان starPaths يتم تضمينها في تنفيذ ملفات الاستفادة من ذلك.

  • عموما إذا كنت الحصول على سر أخطاء لها علاقة الذاكرة تالفة.محاولة وضع نقطة على السطر الأول من drawRect طريقة والقيام "po starPaths"في المصحح إطار وحدة التحكم لمعرفة ما هو عليه و ما هو نوع من الكائن في وقت يعتقد أنه هو.

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