"إعادة تعريف" الفئة "كنوع مختلف من الرمز" والتعارض مع أسماء فئة وقت التشغيل OBJC

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

  •  25-08-2022
  •  | 
  •  

سؤال

لدي فصل في الهدف-C:

@interface Category : NSObject
{
// ...
}

كل شيء كان جيدا و لقد استخدمت هذا الفصل بدون مشاكل في 3 مشاريع مختلفة.

بمجرد أن قررت إنشاء هدف اختبار لمشروع واحد. ثم حدث الشيء الغريب: يرفض التحويل البرمجي تجميع هذا الخطأ:

Redefenition of 'Category' as a different kind of symbol

كما أشار إلى runtime.h مع

typedef struct objc_category *Category;

حسنًا ، إنه معقول.

ومع ذلك ، لا أستطيع أن أفهم لماذا سمحت لي باستخدام هذه الفئة من قبل وما هو الفرق بين الهدف الأصلي وهدف الاختبار. لقد تحققت Deploy target, iOS SDK, ، جميع وحدات الماكرو ، مسارات الرأس ، #import <objc/runtime.h> والطبقات في كلا الهدفين - هذه هي نفسها تقريبا.

لا أرغب في إعادة تشكيل اسم هذه الفئة بسبب استخدامه في مشاريع المضاعفات ، فما الذي يمكن أن يكون سبب مثل هذا السلوك؟

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

المحلول

يجب عليك إعادة تشكيل اسم هذه الفئة على أي حال ، لتجنب مثل هذه الاصطدامات في المستقبل. وسيكون من المؤلم أن تفعل ذلك عاجلاً وليس آجلاً.

من المحتمل أن تستورد ملفًا يستورد <objc/runtime.h> في مرحلة ما. نظرًا لأن الفرق بين هدف الاختبار والهدف العادي ، فإن اختبار Xcode يعمل عن طريق حقن الرموز على حزمة. قد يكون هناك بعض الاختلافات في تجريد التعليمات البرمجية ورموز الرموز التي يمكن أن تفسر هذا النوع من الخطأ.

لا عجب توصي Apple ببادئة فئات مع 2 أو 3 أحرف

نصائح أخرى

على الرغم من أنه يجب عليك فعل ما يقوله olotiar في إجابته ، إلا أن هناك حلًا سريعًا.

انتقل إلى مشروعك بناء الإعدادات, ، البحث عن "تمكين الوحدات النمطية (C والهدف C)"وتعيين القيمة إلى رقم.

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