سؤال

حسنًا ، كان لدي تطبيق كنت أقوم بتطويره في iPhone SDK 2.2 وقمت مؤخرًا ببناءه وأطلقته في محاكاة 3.0. لا يزال قاعدة SDK في 2.2. كنت أحسب أن تجنب القضايا. بدلا من ذلك أحصل

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000a1b1c1f3
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x92f4b688 objc_msgSend + 24
1   Foundation                      0x305085bd -[NSCFString isEqualToString:] + 61
2   HappyApp                        0x00002c27 -[CombinationsTableViewController loadData] + 220 (CombinationsTableViewController.m:64)

يحدث الحادث على خط بسيط للغاية ، حيث total هو UITextField

if (![total.text isEqualToString:@""] ) {

هل واجه أي شخص هذا؟ أشعر أنها مشكلة في التنافس ، أو أن تطبيقي بأكمله لا يتم تجميعه بشكل صحيح. إنه يعمل في محاكاة 2.2.1. إذا تبين أن هذا ليس هو السبيل لاختبار تطبيق 2.2 في OS 3.0 ، فما الذي يجب أن أفعله بخلاف تبديل هذا المربع المنسدلة؟

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

if(!([total.text isEqual:totalTextCache]
  && [divisions.text isEqual:divisionsTextCache])) {
  //Loads the data for the table only if the values were actually changed
  totalTextCache = total.text; //ditto for divisions
}

هذه الخطوط هي الاستخدامات الوحيدة totalTextCache, ، وأصبح غير صالح إذا total.text تم تغيير. لم يسبب هذا أبدًا مشكلة في 2.2.1 SIM ربما لأن القديم total.text لم يتم إصداره من قبل وقت التشغيل عندما تغير القيمة. لكن هذا الرمز كان خطأ. لقد أصلحته عن طريق تغييره للقيام بما اعتقدت أنه يفعله Isequal:

if(!(total.text==totalTextCache && divisions.text==divisionsTextCache))

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

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

المحلول

عندما قمت بتثبيت 3.0 SDK ، ذهبت أدوات 2.0 الخاصة بي بعيدًا ، لذا لست متأكدًا مما إذا كان هذا قابلاً للتطبيق ، لكنني لا أعتقد أن بناء المحاكاة مصممة لتكون متوافقة ثنائية مع الأوقات المستقبلية.

من المحتمل أن تكمن المشكلة في الكود الخاص بك. إذا كان الأمر كذلك ، يمكنني القول هو أن لديك مشكلة في إدارة الذاكرة وليس "خلاف الخيط". كل شيء يحدث في الموضوع الرئيسي في Uikit (ليس مؤشر ترابط).

تحقق من المكان الذي تقوم فيه بإعداد متغيرك الكلي ؛ ربما تم إصداره بالفعل بحلول الوقت الذي تضغط فيه على هذه الطريقة. تأكد من أن الاحتفاظ به معقول.

هل لديك نفس الخطأ عند البناء لمدة 3.0؟

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