cocoa - تحميل - مطورين ابل




حدث خطأ "غير معروف في الفئة<MyClass> في واجهة المستخدم" في وقت التشغيل (20)

على الرغم من أن Interface Builder يعرف MyClass ، فإنني أتلقى خطأ عند بدء التطبيق.

يحدث هذا عندما يكون MyClass جزءًا من مكتبة ، ولا يحدث إذا قمت بترجمة الصف مباشرة في هدف التطبيق.


أحيانًا يفتقد customModule="AppName" customModuleProvider="target"

لإصلاحه ، افتح لوحة العمل كمصدر شفرة واستبدل هذا السطر:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

الى هذا:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

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

تحدث مشكلتي عندما تتحدث هذه الرسالة بالفعل عن فئة غير موجودة .. لذا فإن مثالاً سيعيدني إلى مراجعة git قديمة لا علم لها بفئة معينة .. ومع ذلك ، يشتكي المُحسِّن من أن الصف المذكور لا يتضمن ' ر موجودة ..

حل؟

  • Nuke الأمر كله! أولا حذف جميع ملفات البناء وغيرها عن طريق حذف جميع محتويات هذا الدليل ~ / Library / Developer / Xcode / DerivedData
  • حذف التطبيق من الهاتف نفسه (ومسح محتويات جهاز المحاكي إذا كنت تستخدم جهاز محاكاة)

يجب أن تكون جيدًا بعد ذلك


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

خطأ Apple Mach-O Linker (APActivityIcon)


أفضل طريقة لإزالة الخطأ هي: 1) حدد ملف Class (.m) 2) تحت " Target Target " ، "check" the Project name entry


إنها مشكلة في ذاكرة التخزين المؤقت Xcode4 ، قم فقط بحذف جميع المجلدات الموجودة أسفل / Users / your_user / Library / Application Support / iPhone Simulator / 4.3 / Applications /

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

حظا طيبا وفقك الله. باسكوال


انتقل إلى "ProjectName" ، انقر فوقه ، ثم انتقل إلى علامة التبويب "إنشاء مراحل" ، ثم انقر فوق "تصنيف المصادر" ، ثم انقر فوق "+" زر ، ستظهر نافذة ، اختر "MyClass". م "الملف ثم انقر فوق" إضافة "،

بناء المشروع وتشغيله ، سيتم بالتأكيد حل المشكلة


حالتي - في محاولة لاستخدام فئة من إطار عمل سريع في مشروعي الهدف ج ، حصلت على هذا الخطأ. كان الحل لإضافة وحدة (إطار عمل سريع) للفصل في أداة إنشاء الواجهة / القصة المصورة كما هو موضح أدناه. لا شيء آخر


ركضت في هذا في سويفت.

نقل الملف .xib إلى المجلد Base.lproj للمشروع تخلص من هذا الخطأ.


فقط إزالة MyClass.m و. h وإضافتها إلى المشروع مرة أخرى هو العمل بالنسبة لي.


فقط قم بإضافة رمز أدناه في بداية تطبيق appdelegate applicatoindidfinishlanching الطريقة ، فإنه سوف يعمل بشكل جيد

[صنف myclass]


في حالتي ، لدي XCode6 ، ينتهي الملف .m المحدد للفئة في مكان خاطئ في مرحلة الإنشاء - كان يجب أن يكون تحت Compilation Sources ، ولكن في نهاية المطاف في


في حالتي حصلت على هذا الخطأ لأنني حاولت حفظ بعض العمل عن طريق إنشاء مشروع جديد ثم حذف العديد من الملفات المصدر والنسخ على الملفات المصدر لنفس الاسم من مشروع العمل. أنا أيضا نسخ ملف MainStoryBoard الذي كان يبحث عن RootViewController. ومع ذلك ، عندما قمت بحذف RootViewController الأصلي ثم تمت إضافته في RootViewController من المنتج السابق ، من الواضح أن عملية Add Files فشلت في "تحديد" المربع الهدف كما هو موضح أعلاه. بمجرد إدخال جميع ملفات ".m" المستوردة حديثًا والتأكد من فحص مربع العضوية المستهدفة ، كان كل شيء على ما يرام. أعتقد أن ما كان يحدث هو أن ملف لوحة العمل كان يبحث عن فصل دراسي "تم استبعاده" من الرابط لأن العضوية المستهدفة لم يتم التحقق منها. التأكد من أن الملفات المطلوبة لهذا الهدف محددة في العضوية المستهدفة في مفتش الملفات. شكرا بات! (أنظر فوق)


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

1) افتح مشروعك في سامية أو محرر جيد آخر. ابحث عن الصف المشار إليه. 2) قم بإزالة البت الكامل الذي يقول

customClass="UnrecognizedClassName"

3) احفظها. 4) العودة إلى xcode وتنظيف المشروع ، ومحاولة تشغيله الآن.

عملت بالنسبة لي.


كان لدي "عرض RateView غير معروف في Interface Builder" حيث كان RateView فئة فرعية من UIView. كنت قد أسقطت UIView على المشهد Storyboard الخاص بي وغيرت الحقل فئة مخصص إلى RateView. ومع ذلك ، ظهر هذا الخطأ.

للتصحيح ، قمت بتغيير اسم الصف الخاص بي إلى RateView2 وقمت بتغيير كافة المراجع إلى المطابقة باستثناء حقل الفئة المخصصة لـ UIView. رسالة الخطأ لا تزال تظهر كما كان من قبل مع RateView كفئة مفقودة. هذا تأكيد أن رسالة الخطأ كانت مرتبطة بقيمة حقل فئة مخصص. لقد غيرت هذه القيمة إلى RateView2 وتغيرت رسالة الخطأ إلى "فئة غير معروفة RateView2 في واجهة باني". تقدم من نوع ما.

أخيرا ، فتشت ملفات التعليمات البرمجية المصدر نفسها في ملف المفتش. هناك اكتشفت أن ملف التعليمات البرمجية المصدر (التي قمت بنسخها من البرنامج التعليمي) لم يكن مرتبطا مع بلدي الهدف. وبعبارة أخرى ، لم يكن لها عضوية مستهدفة. راجعت المربع الذي جعل ملف شفرة المصدر للطبقة عضوًا في التطبيق المستهدف وانتهت رسالة الخطأ.


لا يبدو أن هذه المشكلة قديمة.

كان لي نفس المشكلة مع Xcode 8 وحلها مماثلة مثل smilebot :

  1. افتح ملف لوحة العمل الخاص بك باسم "شفرة المصدر" داخل Xcode:

  2. ابحث عن الصف المشار إليه وأزل الجزء بالكامل الذي يقول

customClass = "UnrecognizedClassName"

  1. افتح ملف لوحة العمل الخاص بك باسم "interfacebuilder - storyboard" مرة أخرى وإعادة بناء التطبيق الخاص بك.

لقد جربت هذا ، والإجابات الأخرى المذكورة في هذا الموقع ، والتي لم يتم ترتيبها لي. هذه التعليقات (من http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html ) ساعدت:

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

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

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


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


لقد واجهت هذه المشكلة اليوم باستخدام سويفت.

لقد قمت بتغيير Model.h + Model.m إلى Model.swift . تم استخدام هذا الكائن في Interface Builder مع class = Model .

بمجرد أن أقوم باستبدال الكائن لم يعد بالإمكان تحميل الفصل.

ما كان علي فعله هو تغيير مرجع الصف في البكالوريا الدولية من:

Class = Model
Module = 

إلى

Class = Model
Module = <TARGETNAME>

ستجد <TARGETNAME> في إعدادات <TARGETNAME> . وهو أيضًا الاسم الذي يظهر في عنوان Swift- #import "TARGETNAME-Swift.h" : #import "TARGETNAME-Swift.h"


هذا ليس له أي علاقة مع Interface Builder ، ما يحدث هنا هو أنه لا يتم تحميل الرموز من مكتبتك الثابتة بواسطة Xcode. لحل هذه المشكلة يجب أن تحتاج إلى إضافة الإشارات -all_load -ObjC إلى " Other Linker Flags في Project البناء (وربما الهدف) إعدادات.

نظرًا لأن Objective-C يولد رمزًا واحدًا لكل فئة ، يجب علينا إجبار رابط التحميل على تحميل أعضاء الفئة أيضًا باستخدام علامة -ObjC ، ويجب علينا أيضًا فرض تضمين جميع الكائنات الخاصة بنا من مكتبتنا الثابتة بإضافة رابط -all_load العلم. إذا قمت بتخطي هذه الأعلام عاجلاً أم آجلاً ، فستواجه خطأ من unrecognized selector أو تحصل على استثناءات أخرى مثل تلك التي لاحظتها هنا.


وقد دفعني هذا الأمر لبعض الشيء ولم يساعدني أي من الاقتراحات أعلاه في التخلص من الخطأ. لحسن الحظ ، لم يكن لدي سوى كائن واحد من البكالوريا الدولية (IB) باستخدام الفصل ، لذلك قمت بحذفه وأضفته مرة أخرى مع نفس الفئة المحددة. ذهب الخطأ بعيدا ...







interface-builder