سؤال

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

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval; 

عندما ينتهي المستوى، يحصل وحدة التحكم هذه على deallec'd وتحريرها. في السابق، كنت أحصل على تعطل بعد إطلاق سراح وحدة التحكم هذه لأنني لم أخرج المندوبين على مقياس المستخدم (أي أنه لا يزال يرسل أحداثا إلى كائن تم إطلاق سراحه الآن). حتى الآن، داخل Deallec، أقوم بذلك:

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = nil;

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

وبالتالي فإن السؤال هو، هل يسمح لك فقط بمندوب واحد لكل تطبيق للتسرع، أو أنا فقط أفتقد شيئا ما؟ لم أر أي شيء في المستندات التي لا تدفع تحديد المفوض عدة مرات. أنا جديد قليلا في OBJ-C، ولكن بقدر ما أفهم المندوبين، لا ينبغي أن يكون هذا غير تقليدي للغاية.

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

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

المحلول

بشكل عام، لدى الأجسام التي لديها مندوبون واحدة فقط في وقت واحد. ما لم يتم توثيق خلاف ذلك، لا ينبغي أن يكون هناك أي قيود على تحديد أكثر من كائن مختلف كمندوف على مدى عمر مثيل معين.

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

نصائح أخرى

سيكون الحل المحتمل هو الحصول على فئة مختلفة، وربما مندوب التطبيق الخاص بك، بمثابة مندوب uaccelerareter ولديه هذا الفصل إرسال مخصص NSNotification عندما يتلقى accelerometer:didAccelerate: رسالة. يمكنك إي إما إرسال الرسالة فقط عند اكتشاف نوع التسارع الذي تهتم به أو يمكنك إرسال الإشعار في كل مرة ويشملها Paramter Uiacceleration كجزء من الإخطارات userInfo. وبعد يمكن لوحادك المهتمين ببيانات التسارع التسجيل للحصول على الإخطارات حسب الحاجة.

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