كيفية تقسيم ملف iOS.m إلى المزيد من الملفات؟

لدي ملف .m ، يحتوي علىimplementation ، ولكنها أصبحت كبيرة جدًا وأحاول نقل بعض وظائف الأسلوب إلى ملف ثانٍ.

كل من ملفات .m تبدأ

@implementation GesticulatorViewController

@synthesize score_display;
@synthesize game_status;
@synthesize player_options;
@synthesize total_players_field;
@synthesize gesticulation_sentence;
@synthesize gesticulation_input;
@synthesize main_view_manager;
@synthesize game_state;

لكنني أحصل على تحذير رابط: "ld: رمز مكرر _OBJC_IVAR _ $ _ GesticulatorViewController.gesticulation_input"

0
هذا يحل هذه المشكلة.
وأضاف المؤلف Doug Null, مصدر
لا يمكنك استخدام نفس اسم الفصل مرتين.
وأضاف المؤلف rishi, مصدر
وأضاف المؤلف onmyway133, مصدر
انظر إلى مثال للحالة المشابهة: flighttoios .wordpress.com/2016/11/02/و hellip؛
وأضاف المؤلف NeverHopeless, مصدر
وصلنا وأنا دنكان إلى نفس الحل. لقد قدمت بعض الأمثلة البرمجية في هذه الإجابة - stackoverflow.com/questions/13357775/&hellip؛
وأضاف المؤلف software evolved, مصدر

4 إجابة

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

تكمن الحيلة في إنشاء هذا العمل في إضافة ملف مصدر #included إلى مشروعك ، ولكن ألغِ تحديد جميع الأهداف. أنت لا تريد أن يحاول Xcode ترجمة الملف على نفسه - فقط # تضمينه في ملف وحدة التحكم الرئيسية.

0
وأضاف
هذا هو إصلاح مؤقت جيد وعمل لي ، لكنه يكسر أدوات الملاحة كود التعليمات البرمجية للملف المضمن (#pragma علامة ، وما إلى ذلك)
وأضاف المؤلف Paul Slocum, مصدر

أوصي صنع أكثر من جهاز تحكم واحد. كل وحدة تحكم يعالج قطعة مختلفة.

أقوم بعمل تطبيق فيديو. لدي PlayerControlsViewController ، يحتوي على جميع أزرار التشغيل والإيقاف المؤقت في العرض.

لدي أيضًا أداة تحكم أدوات بها أدوات التحديد وأي عناصر قائمة بداخلها.

خصائص تلك وحدات التحكم تأخذ وحدات التحكم عرض وعرض وإزالة من عرض super. ثم قم بتعيين العرض في مكان ما داخل العرض الخاص به وتوصيله إلى PlayerController. الذي يضم اللاعب في داخله.

يحتوي كل عنصر من وحدات التحكم هذه على التعليمات البرمجية الخاصة به لمعالجة المهام الخاصة به. ويرسل الرسائل مرة أخرى إلى وحدة تحكم العرض الرئيسي عبر بروتوكول لكل منهما.

سيؤدي ذلك إلى ترحيل الأوامر ذهابًا وإيابًا بين وحدات التحكم الأخرى ، والحفاظ على الإعداد في وحدة التحكم الرئيسية في العرض.

وأعتقد أن هذا هو المعيار المتوقع للتشغيل لتعمل التطبيقات بشكل صحيح ، وأن تكون قابلة للصيانة بسهولة.

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

ما عليك سوى تذكر إزالته من superview قبل إضافته إلى العرض الخاص بك.

0
وأضاف

لا يمكن أن يكون لديك نفس تطبيق الفصل في ملفين مختلفين.

في حالتك ، لا يمكنك تقسيم تنفيذ GesticulatorViewController إلى ملفين .m .

تعديل: </قوي>

وأود أن استخدام الفئاتobjective-cلتفريق التنفيذ.

مع الفئات ، لديك الفرصة لتجميع الطرق معا التي تؤدي مهام مماثلة.

Here's an explanation of "Categories and Extensions" from Apple's documentation: https://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1

0
وأضاف
ما هي إذن الطريقة الأسرع لتقسيم الطبقة الكبيرة إلى عدة ملفات فرعية؟ إنشاء فئات متعددة تكاليف وقت التطوير.
وأضاف المؤلف Doug Null, مصدر

If it all needs to be in one view, but you think the implementation is too large, you can always do categories :) Just go to File->New->Objective-C Category. Then make the category on your view controller, and add it!

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

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

0
وأضاف