it-swarm.asia

ماذا يعني هذا؟ "NSUnknownKeyException" ، السبب: ... هذه الفئة ليست متوافقة مع تشفير قيمة المفتاح للمفتاح X "

أحاول ربط UILabel بـ IBOutlet الذي تم إنشاؤه في صفي.

يتعطل تطبيقي بسبب الخطأ التالي. ماذا يعني هذا؟ كيف يمكنني إصلاح ذلك؟

*** إنهاء التطبيق بسبب استثناء غير معلوم "NSUnknownKeyException" ، والسبب: '[<UIViewController 0x6e36ae0> setValue: forUndefinedKey:]: هذه الفئة ليست متوافقة مع ترميز قيمة المفتاح XXX للمفتاح.'

1089
Guillaume Dubois

قد يكون لدى جهاز التحكم في العرض الفئة الخطأ في xib.

لقد قمت بتنزيل مشروعك.

الخطأ الذي تحصل عليه هو

"NSUnknownKeyException" ، السبب: '[<UIViewController 0x3927310> setValue: forUndefinedKey:]: هذه الفئة ليست متوافقة مع ترميز القيمة الرئيسية لسلسلة المفاتيح.'

يحدث بسبب Second عرض وحدة التحكم في MainWindow.xib وجود فئةUIViewController بدلاً من SecondView. تغيير الفئة الصحيحة يحل المشكلة.

بالمناسبة ، من الممارسات السيئة الحصول على أسماء مثل "string" في Objective-C. فإنه يدعو الاصطدام تسمية وقت التشغيل. تجنبها حتى في تطبيقات التدريب مرة واحدة. قد يكون من الصعب للغاية تعقب اصطدامات التسمية ولا تريد تضييع الوقت.

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

سبب آخر محتمل لهذا الخطأ:

منفذ سيء.

لديك إما تمت إزالته أو تمت إعادة تسميته اسم منفذ في ملف .h الخاص بك.

قم بإزالته في "مفتش الاتصال" في ملف .xib أو .storyboard.

902
TechZen

قد يكون لديك اتصال سيء في xib الخاص بك.

لقد كان هذا الخطأ عدة مرات. في حين أن إجابة TechZen صحيحة تمامًا في هذه الحالة ، فإن السبب الشائع الآخر هو عندما تقوم بتغيير اسم خاصية IBOutlet في ملفك .h/.m الذي قمت بتوصيله بالفعل بمالك الملف في المنقار.

من بنك الاستثمار القومي:

  1. حدد الكائن في IB وانتقل إلى "Connections Inspector".
  2. ضمن "مرجع المخارج" ، تأكد من أن الكائن الخاص بك لا يزال غير متصل باسم الخاصية القديمة ... إذا كان كذلك ، انقر فوق "x" الصغير لحذف المرجع والبناء مرة أخرى.

    example 1

سبب شائع آخر إذا كنت تستخدم Storyboard ، فقد يكون لدى UIButton أكثر من مهمة واحدة (الحل هو نفسه تقريباً بالنسبة لـ nib):

  1. افتح لوحة العمل الخاصة بك وانقر بزر الماوس الأيمن فوق UIButton
  2. سترى أن هناك أكثر من تعيين/مرجع لهذا الزر. قم بإزالة أحد الإطارات الرمادية "Main ..." مع علامة "x" الصغيرة:

     example 2

1477
nuttysimple

اضطررت إلى حذف التطبيق من جهاز محاكاة/iPhone للتخلص من هذا الخطأ.

110
Steve Rogers

كان لدي هذا الخطأ عندما كنت أحاول تطبيق ViewCell مخصص لجدول. عندما سلطت الضوء على وحدة تحكم العرض لـ XIB وتوصيلها بالعناصر الموجودة في CellView تسببت في الخطأ "هذه الفئة ليست متوافقة مع ترميز القيمة الرئيسية للمفتاح" بمجرد أن قمت بحذفها ، تخلصت من الخطأ.

حذف الاتصالات في الصورة أدناه. Delete the connections in inspector when File Owner is highlighted

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

The connection should be in here when Table View Cell is highlighted

99
uplearnedu.com

في بعض الأحيان ، يتعلق الأمر بـ "اكتساب من الهدف". يجب تعيين هذه القيمة. مع التطبيقات المستهدفة الفردية ، يمكنك فقط اختيار Inherit From Target. إذا كان لديك أكثر من هدف واحد حدد الهدف المطلوب.

 enter image description here

75
mrabins

إذا كان تطبيق iPhone فقط ، وليس تطبيقًا عالميًا ، فتأكد من أن الحقل التالي فارغ:

الأهداف> ملخص> iPhone/iPod Deployment Info> الواجهة الرئيسية

إذا حددت xib هناك فسوف يتعطل.

63
erkanyildiz

يشير هذا الخطأ إلى أن منشئ واجهة متصل بالفعل {تتم إزالة/إعادة تسمية الكائن في مصدر مالكها (مالك الملف).

انقر مع الضغط على مفتاح التحكم على {ملف الملفات في Interface Builder إذا كنت ترى علامة تعجب تحتاج إلى إصلاح ذلك.

في الصورة أدناه ، يمكنك رؤية أن "aRemovedView" تحتوي على علامة تعجب على يمينها ، وذلك لأنني قمت بإزالة كائن عرض IBOutlet أثناء اتصاله بالفعل في IB.

enter image description here

هذا يعطي الخطأ التالي: إنهاء التطبيق بسبب استثناء غير معلوم 'NSUnknownKeyException' ، السبب: '[setValue: forUndefinedKey:]: هذه الفئة ليست متوافقة مع ترميز القيمة للمفتاح aRemovedView.'

59
Tibidabo

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

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

أتمنى أن يساعدك هذا.

enter image description here

41
Eric Brotto

في حالتي ، كان خطأً في شفرة مصدر لوحة العمل ، اتبع الخطوات التالية:

  1. افتح أولاً لوحة القصة ككود مصدر
  2. البحث عن <connections>
  3. إزالة الاتصالات غير المرغوب فيها

فمثلا:

<connections>
    <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
    <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
    <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>

كما ترى ، فهذه هي الروابط بين أسماء متغيرات الشفرة وعلامات xml لتخطيط لوحة العمل ؛)

35
Fareed Alnamrouti

enter image description hereenter image description here

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

32
ashack
  1. تحتاج فقط إلى تحديد IBOutlet مرة واحدة ، IBOutlet تسمية ivar الخاص بك غير ضرورية.
  2. هل تم إنشاء بنك الاستثمار القومي الخاص بك باستخدام UIViewController؟ في مرحلة ما يجب أن تتصل [SecondView initWithNibName:@"yourNibName" bundle:nil];
30
kubi

كان هذا يحدث لي فقط عند تصحيح الأخطاء على جهاز (iPhone). كان iOS Simulator يعمل على ما يرام. يبدو أن القيام بـ "المنتج-> تنظيف" من Xcode يحل المشكلة ، لكن ليس لدي أي فكرة عن السبب.

30
Maj

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

23
Ilansky Naftali

تلقيت رسالة الخطأ نفسها بالضبط وشكرت (!!) لكيرا من http://www.idev101.com تمكنت من حل التحدي. لقد وجدت موقعها فقط بعد googling و التراص على كل هذه المواضيع. أقوم الآن بالنشر هنا للتحدي التالي الذي يأتي إلى StackOverFlow ولديه نفس التحدي الذي واجهته لأن هذا الشخص سيأتي على الأرجح إلى هذا الموضوع عبر Google.

أدركت أنني فعلت هذا خطأ:

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

بدلا من هذا:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

أين

DeviceViewController

كان اسم صفي المعروف أيضا باسم

DeviceViewController.h 
DeviceViewController.m

سيكون لديك ل

"import DeviceViewController.h"

في تطبيقك (ملف .m) حيث تريد الاتصال ، على سبيل المثال UIViewController آخر.

لا أشعر بالأسف مطلقًا إذا كنت أذكر ما هو واضح للمبتدئين مثلي ، وقد أحصل على أصوات لأن هذا لا يتعلق بالتحديد بالسؤال ، لكنني كنت أبحث في 4 ساعات (؟!؟) مباشرة الآن للإجابة على رسالة الخطأ هذه . إذا كان بإمكاني تجنيب هذا لشخص أو شخصين سيكون رائعًا :)

ملاحظة: بالنسبة لأولئك المهتمين بكيفية استمرار الكود لتحميل UIViewController الآخر:

    [self presentViewController:deviceViewController animated:YES completion:nil];
22
Yannis

عند النظر إلى الإجابات الأخرى ، يبدو أن هناك الكثير من الأشياء التي يمكن أن تسبب هذا الخطأ. هنا واحد أكثر.

اذا أنت

  • لديك وجهة نظر مخصصة
  • وأضافIBInspectable الممتلكات
  • ثم احذفها لاحقًا

ثم قد تحصل أيضًا على خطأ مشابه

فشل في ضبط (xxx) خاصية تم فحصها بواسطة المستخدم في [طريقة العرض المخصصة] ...: هذه الفئة ليست متوافقة مع تشفير قيمة المفتاح للمفتاح [xxx].

الحل هو حذف الخاصية القديمة.

 enter image description here

افتح مفتش الهوية لفئتك ، وحدد اسم الخاصية ضمن سمات وقت تشغيل محدد بواسطة المستخدم ، واضغط على زر ناقص (-).

20
Suragch

يحدث هذا لي عندما يكون لدى وحدة التحكم في العرض الخاصة بي ملف .xib ، ولكن يتم إنشاؤه الآن برمجيًا.

على الرغم من أنني قمت بحذف ملف .xib من هذا المشروع. قد يحتوي المستخدمون على جهاز iPhone/iPad على ملفات .xib لمراقب العرض هذا.

محاولة تحميل ملف .xib عادةً ما تسبب هذا التعطل:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'

الحل عند إنشائه بطريقة برمجية قد يكون هذا:

-(void)loadView {
    // Ensure that we don't load an .xib file for this viewcontroller
    self.view = [UIView new];
}
15
neoneye

قد تختلف خاصية "الوحدة النمطية" لوحدة تحكم العرض في "مفتش الهوية" عما كنت تتوقعه. تأكد أيضًا من إضافة فصول جديدة إلى قائمة أهدافك.

12
ercu

واجهت مشكلة مماثلة لمشروع يحتوي على هدفين (مع MainWindow XIB الخاص بهم). كانت المشكلة الأساسية التي تسببت في هذا الخطأ بالنسبة لي هي عدم تضمين فئة UIViewController في قائمة موارد المشروع الثاني. أي. سمح لي أداة إنشاء الواجهة بتحديده في MainWindow.xib ، لكن في وقت التشغيل لم يتمكن النظام من تحديد موقع الفصل.

أي. cmd- انقر فوق فئة UIViewController المعنية وتحقق جيدًا من تضمينها في علامة التبويب "الأهداف".

10
David Carney

قد يكون هذا هو حال الرجوع إلى أحد مكونات واجهة Xib التي قمت بإعادة تسميتها أو حذفها. إعادة مرجعية يعمل بالنسبة لي.

8
MehrozKarim

لقد واجهت هذه المشكلة في مشروعي المكرر وتم حلها عن طريق التحقق من مكانين:

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

آمل أن يعمل لبعض.

8
kubilay

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

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

كان لدي بيان تبديل لكل نوع كنت أتعامل معه (على سبيل المثال ، Bool? ، CShort? ، String?) ولكل عقدة XML مررت بها ودققت في نوع الكائن ثم قمت بتحويل القيمة إلى ذلك النوع وحاولت تعيينه مع setValue:forKey.

أخيرًا ، بدأت في التعليق على جميع سطور setValue:forKey هذه ، ووجدت أن حالة بيان التبديل default عملت مع String?.

أخيرًا ، اكتشفت أنك لا يمكنك استخدام أنواع سويفت الاختيارية مع setValue:forKey إلا إذا كان لديها تخطيط مباشر لنوع Object-C مثل String? أو NSNumber?. انتهى بي الأمر إلى تغيير جميع أنواع CShort? إلى NSNumber? نظرًا لأن ذلك يحتوي على تعيين مباشر. بالنسبة لـ Bool? في حالتي ، كان من الجيد بالنسبة لي استخدام Bool وتهيئته إلى false. البعض الآخر قد لا يكون هذا الترف.

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

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

لا يمكنك استخدام KVC على خاصية Int Int ، لأن KVC هو Cocoa/Objective-C ، والهدف C لا يمكنه رؤية Int اختياري - لا يتم ربطه بالهدف- C. يمكن أن يرى الهدف- C فقط الأنواع التي يتم ربطها بالهدف- C:

أنواع الفئات المشتقة من NSObject

أنواع الصفوف التي يتم كشفها بواسطةobjc

الهياكل السريعة التي يتم سدها

8
AtheistP3ace

هذا الخطأ هو شيء آخر!

إليكم كيف أصلحته. أنا أستخدم الإصدار 6.1.1 من xcode وأستخدم Swift. لقد حصلت على هذا الخطأ في كل مرة حاول فيها تطبيقي أداء سلسلة من الألعاب للقفز إلى الشاشة التالية. هنا ما فعلت.

  1. تأكد من أن الزر كان متصلاً بالإجراء الصحيح. (لم تكن هذه هي المشكلة ، ولكن لا يزال من الجيد التحقق من ذلك)
  2. تحقق من أن الزر لا يحتوي على أي إجراءات أو منافذ إضافية قد تكون قمت بإنشائها عن طريق الخطأ. (لم تكن هذه هي المشكلة ، ولكن لا تزال جيدة للتحقق)
  3. تحقق من السجلات وتأكد من أن جميع الأزرار الموجودة في شاشة NEXT SCREEN لها الإجراءات الصحيحة ، وإذا كان هناك أي شرائح ، فتأكد من أن لديها معرف فريد. (كانت هذه هي المشكلة) [.
    • لم يكن أحد هذه المقاطع معرفًا فريدًا
    • أحد الأزرار لديه إجراء واثنين من المنافذ التي قمت بإنشائها عن طريق الخطأ.
    • احذف أي منافذ إضافية وتأكد من أن المقاطع إلى الشاشة التالية لها معرفات فريدة.

في صحتك،

7
Ronaldoh1

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

طريقة خاطئة لدفع المراقب المالي

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

طريقة صحيحة

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

لم أجد أي إجابة كما هو مذكور أعلاه ، فربما يكون من الممكن مساعدة شخص ما لديه نفس المشكلة

7
Emy Stats

كانت هناك مشكلة أخرى "غير متوافقة" وجدت عندما تمكنت من الحصول على نسختين من الفصل لسبب ما.

كنت أضيف مفاتيح إلى نسخة خاطئة. لا يزال Interface Builder يرى المفاتيح ويسمح لي بتوصيلها ، لكن في وقت التشغيل كان يستخدم النسخة الأخرى من الفصل التي لم يكن بها المفاتيح الجديدة.

للعثور على النسخة "الصحيحة" التي استخدمتها ، انقر فوق cmd الخاص بـ XCode على اسم الفصل في مكان آخر للانتقال إلى النسخة الصحيحة ، ثم قتلت النسخ غير المستخدمة غير الصالحة (بعد إحضار تعديلاتي من النسخة غير المستخدمة أولاً).

معنويات القصة: الملفات الصفية المكررة سيئة.

7
Jason

إذا كان لديك فئة فرعية مخصصة لـ UIViewController مع IBOutlets والتي تسبب مشاكل ، فإن المجموعة الوحيدة من الخطوات التي وجدتها للتخلص من الخطأ هي

.1 قم بتغيير الفئة إلى UIViewController

.2 افصل جميع المنافذ (ستحصل جميعها على مثلث التحذير الأصفر الآن) - قد يكون ذلك كافياً فقط لفصل منفذ (منافذ) الإشكالية.

.3 قم بجميع الخطوات القياسية -، ⌘K ، احذف البيانات المشتقة (، سجادات الصلاة ، خرز القلق)

.4 قم بتشغيل التطبيق - انتقل إلى المشهد الإشكالي.

.5 اقتل التطبيق ، ارجع إلى Interface Builder وقم بتغيير الفئة مرة أخرى إلى اسم صفك المخصص.

.6 أعد توصيل منافذ البيع الخاصة بك.

قم بتشغيل التطبيق وسيؤدي هذا عادةً إلى مسح مشكلات الامتثال ذات القيمة الأساسية.

6
Damo

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

لتصحيح ذلك:

  1. تمييز ملف .m الخاص بك.
  2. في الجزء الأيسر ، حدد File Inspector.
  3. ضمن قسم "العضوية المستهدفة" ، تأكد من تحديد هدف الإنشاء المناسب.

آمل أن يكون هذا يساعد شخص ما هناك.

6
Mike M. Lin

في حالتي. لم يكن لدي منافذ مفقودة في ملفات xib بعد الدمج.

Shift + Command + K

حل مشكلتي. قمت بتنظيف مشروعي وإعادة بنائه.

5
Malder

في حالتي ، كان السبب في ذلك هو الرجوع إلى Nib الخطأ:

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];
4
wspruijt

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

حاول أيضًا تنظيف الكود.

3
pedrotorres

حصلت على نفس المشكلة فعلت إعادة ضبط جهاز محاكاة. إزالة وإضافة زر التحكم. وأخيرا جعل نظيفة. :) بفضل تجاوز سعة المكدس. كيف أصبح الكود الخاص بي جيدًا وبدأ العمل.

3
priya

قد يكون لديك منافذ إلى UI Element لكن لا تملك خاصية IBOutlet في .h File

بالنسبة لكل عنصر واجهة المستخدم في منافذ اتصال الاختيار ، يتم التحقق من الخاصية في ملف رأس h.

قد يفقد إدخال خاصية واحد أو أكثر في ملف .h.

3
Avinash Jadhav

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

3
Symmetric

تحقق مما إذا كانت لديك منافذ مرجعية طائشة من خلال تحديد الكائن المسيء في واجهة لوحة العمل/xib وفتح Connections Inspector (View-> Utilities-> Show Connections Inspector). إذا قمت بإزالة الاتصالات غير المرغوب فيها ويجب أن تكون على ما يرام.

2
Jorge Rodrigues dos Santos

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

2
Jyotsna

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

في Project Navigator ،

ابحث عن ملف Nib (xib). انقر بزر الماوس الأيمن وعرض المصدر. لقد حذفت القسم الكامل التالي

<object class="IBConnectionRecord">
    <object class="IBCocoaTouchOutletConnection" key="connection">
        <string key="label">DeleteLabel</string>
        <reference key="source" ref="372490531"/>
        <reference key="destination" ref="774585933"/>
    </object>
    <int key="connectionID">20</int>
</object>
2
Apple Pirate

قد تحتاج إلى حذف المنفذ ، وإعادة إنشائه عن طريق رسم النموذج IB إلى ملف .H.

2
IsPha

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

2
sysuser

لقد حدث هذا عندما حصلت على رابط UIView في لوحة العمل وربط IBOutlet مثل:

@property (strong, nonatomic) IBOutlet UIView *someView

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

1
Fonix

في حالتي،

[[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]

كان السبب.

استبدال هذا بـ initWithNibName ، تم الحل.

1
Deve Tester

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

1
IanS

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

1
zakhej

قد يعني ذلك أنك تحاول استخدام واصف الفرز دون وجود علامة atsign في البداية. كما في:

[array valueForKeyPath:@"distinctUnionOfObjects.self"]

والتي يجب أن تكون في الواقع:

[array valueForKeyPath:@"@distinctUnionOfObjects.self"]

1
CommaToast

لقد حدث هذا بالفعل لي مرتين.

كان الحل هو إعادة تشكيل لوحة العمل بالكامل منذ أن قمت بنسخها من واحدة أخرى (لأنها كانت تقريبًا مماثلة)

1
Rafael Ruiz Muñoz

واجهت نفس المشكلة ، وكان السبب في ذلك هو تحديد وحدة نمطية في Interface Builder (بدلاً من تركها فارغة). لذلك ، عندما كنت تستخدم وحدة نمطية مختلفة عن الوحدة التي قمت بتعيينها ، سيتعطل التطبيق: S ... آمل أن يساعد هذا شخصًا آخر ، لأن مشكلتي لم تكن بسبب وجود منفذ بيع قديم أو قديم!

1
Chris Allinson

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

لا توجد مشكلة في القيام بذلك. ما عليك سوى إضافة نقطة إدخال في لوحة العمل الخاصة بك ، أي التحقق من is initial View Controller الذي تشاهد فيه وحدة التحكم التي تريدها. وإلا سيكون مشهدًا رماديًا ويرميك خطأً.

 enter image description here

1
Honey

نفس القضية المقدمة. كان حلي هو وضع قيمة لوحة العمل الصحيحة في القائمة الرئيسية لـ Storyboard. لقد قمت بإعادة تسمية mainstoryboard.storyboard ، لكن لا أعيد تعيين معلومات النشر.

1
steepLearningCurve

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

1
IanS

كان لي هذه المشكلة مع فئات سويفت بعد الترقية إلى xcode7. حلها باستخدام التوجيهobjc:

objc (XXXViewController) فئة XXXViewController

1
user1760527

في حالتي ، تم تغيير اسم خاصية IBOutlet في ViewController.m ، لكن الاسم الموجود في Storyboard لم يتم تغييره. إعادة إدخال IBOutlet في ViewController.m لكل ctrl السحب حل المشكلة. لقد لاحظت أيضًا طريقة للعثور على IBOutlets "الأيتام" في XCode: (انظر إلى الصورة) تلك التي لا "تيتم" لها دوائر متحدة المركز بدلاً من أرقام الأسطر.

 "Orphaned" IBOutlets don't have concentric circles in the line number column.

1
Roman Reimche

كان لدي هذه المشكلة مع القصة المصورة وفئة سويفت لوحدة تحكم عرض واجهة المستخدم. حلها باستخدام التوجيهobjc:

@objc(MyViewController) class MyViewController
1
user1760527

واجهت نفس سجل الخطأ عند التعامل مع خلية viewview الخاصة بي. لقد وجدت أن UILabels الخاص بي يحتوي على منافذ مرجعية مكررة (يمكنك التحقق من ذلك في مفتش المرجع) لكل من مالك الملف وفئتي الخلوية. الأمور تتحسن عندما أحذف الإشارة إلى مالك الملف.

0
JackieLam

لقد قمت بحل هذه المشكلة عن طريق القيام بأمرين:

  1. مرجع الفئة الثابتة للعرض:

  1. أعيد استيراد جميع المنافذ:

0
Bogdan Kobylynskyi

هل تركت كائن الالتقاط غير متصل؟

لول 54 الإجابات وليس واحد منهم هو حل لي. تحدث عن خطأ شائع.

في حالتي ، كان السبب في ذلك هو أنني أملك كائنًا منتقيًا على VC ولم أقم بمنفذ وإجراء له.

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

0
tem

فقط انتبه إذا كنت تحاول ملاحظة قيمة غير موجودة.

حدث هذا لي ببساطة عندما كنت أراقب خاصية "النص" لحقل النص عندما كان من المفترض أن أراقب خاصية "النص" بدلاً من ذلك.

0
Ahmed Elashker

كان لدي نفس الخطأ في شكل مختلف قليلاً آخر:

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

0
sgvd

سبب مشكلتي هو أنني قمت بتكرار ملف لوحة العمل (خارج Xcode إذا كنت أتذكر بشكل صحيح) ، ثم كان لدى جميع أجهزة التحكم في العرض في الملف المكرر نفس معرف الكائن كما في الملف الأصلي. يتمثل العلاج في نسخ وحدات تحكم العرض الملصقة ، وسيحصلون بعد ذلك على معرف كائن جديد. يمكنك رؤية معرّف الكائن في مفتش الهوية.

0
Olle Raab

في حالتي ، أضفت ViewController إلى لوحة العمل ، لكنني لم أقم بتعيين معرّف القصة المصورة في المصمم. بمجرد أن أعطيته هوية ، نجحت.

باستخدام Xamarin/Visual Studio 2015.

0
Wes

تأكد من إضافة تطبيق الفئة المخصصة (حتى الفارغة) في ملف .m مثل:

@implementation MySubclass
@end
0
Iulian Onofrei

لقد وجدت احتمالًا آخر قد يسبب المشكلة.

عند استخدام طريقة "initWithNibName" مع اسم xib خاطئ ، سيؤدي ذلك إلى حدوث هذا النوع من التعطل أيضًا.

مثل اختيار تغيير اسم ملف xib ، ثم foget لتغيير الاسم المستخدم في طريقة "initWithNibName" إلى نفس الاسم.

0
Li Fumin

في بعض الأحيان لا تتم إضافة ملف Swift أو إزالته من الهدف ، انتقل إلى الهدف -> إعداد الإعداد -> ترجمة المصادر -> معرفة ما إذا كان هناك أي ملف فئة Swift مطلوب مفقود أم لا. في حالتي ، تعطل التطبيق بسبب عدم وجود ملف مصدر Swift في الترجمة.

0
jatin

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

انتهى بي الأمر إعادة تشغيل xcode لإصلاح هذه المشكلة.

0
Rickster

بدأت مشكلتي بعد أن قمت بتغيير اسم الهدف.

تحتوي فئات واجهة المستخدم المخصصة الخاصة بي على اسم الوحدة النمطية الذي تم تعيينه على الاسم الهدف القديم.

لقد غيرت الاسم المستهدف إلى الاسم الجديد وهو يعمل بشكل جيد الآن.

0
MBH

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

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

@interface MyViewControllerSubclass : MyViewController

ثم أضفت خاصية خاصة في MyViewControllerSubclass.m:

@interface MyViewController ()
@property (weak, nonatomic) IBOutlet UILabel *crashesApp;
@end

سمح Xcode بسرور لي للاتصال IBOutlet ، ولكن في كل مرة يتم تحميل العرض ، سيتعطل التطبيق مع القديم "غير متوافق مع قيمة مفتاح" chrashesApp "".

كان الحل ، وهو أمر شبه واضح في الماضي ، هو تغيير الفئة الخاصة لاستخدام الاسم الصحيح ، أي اسم الفئة الفرعية :

@interface MyViewControllerSubclass ()
@property (weak, nonatomic) IBOutlet UILabel *noMoreCrashing;
@end
0
clozach

أتذكر أنني واجهت مشكلة مماثلة في الماضي ، لقد تم حلها عن طريق تغيير الخط:

_vicMain = [[UIViewController alloc] initWithNibName:@"vicMainScreen" bundle:nil];

إلى:

#include "vicLogin_iPad.h"       // This is the H file of the class holding the code for
                                 // processing all the IBOUtlets for the Login screen
.
.
.

_vicMain = [[vicLogin_iPad alloc] initWithNibName:@"vicMainScreen" bundle:nil];

لاحظ أنني كنت أُعلن مبدئيًا أن UIViewController لبدء تشغيل _vicMain ، بعد استخدام نافذة منبثقة في الأعلى ، أدركت أن كلاً منهما يستخدم نفس UIViewController.

بواسطة:

1) بما في ذلك الفصل الدراسي الخاص بك (للعرض الفرعي) ، جنبًا إلى جنب مع نفس الوحدة النمطية التي تقوم بما سبق _vicMain (والذي يعد كائن/متغير تحكم في طريقة العرض) بمعنى أنه "vicLogin_iPad.h" في حالتي ، و:

2) استخدم المُنشئ المخصص لإعلان الكائن (أي بدلاً من "xxx = [UIViewController alloc] ..." ، فأنت تستخدم "xxx = [vicLogin_iPad alloc] ..." بدلاً من ذلك.

تم حل المشكلة.

آمل أن يكون هذا مفيدًا لأنه كان الألم هو عدم وجود تفاصيل من رسالة الخطأ ...

التحيات حيدر ساتي

0
Heider Sati

تحدث هذه المشكلة أيضًا إذا كنت تريد تصميم عرض فرعي صغير في ملف XIB منفصل في Interface Builder ، وفي IB قمت بتعيينه إلى نفس الفئة مثل طريقة العرض الأصل.

إذا قمت بإظهارها كالتالي:

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"NameOfTheSubviewNibFile" bundle:nil];
[self.view addSubview:vc.view];

سيظهر العرض ، لكن إذا كان هناك IBOutlets متصل بمالك الملف الخاص به ، فستتلقى رسالة الخطأ. لذلك ، يجب أن يعمل هذا بدلاً من ذلك:

  1. في رمز العرض الأصل الخاص بك ، قم بتعريف IBOutlet UIView *mySubview للإشارة إلى العرض في ملف nib للعرض الفرعي
  2. في ملف nib للعرض الفرعي ، قم بتوصيل "مالك الملف" إلى العرض ، وقم بتعيينه على mySubview
  3. تبين ذلك عن طريق القيام:
 [[NSBundle mainBundle] loadNibNamed: @ "NameOfTheSubviewNibFile" owner: self self:: nil] 
 [self.view addSubview: mySubview]؛ 

وسوف تكون بخير!

0
Eric

حالة صعبة أخرى:

في IB أضاف ViewController إلى لوحة العمل ، وحذف طريقة العرض الخاصة به وتعيين Custom Class على "MyViewController" بحيث يتم إنشاء مثيل للعرض من MyViewController.xib

تحديد معرف لوحة العمل نفس "MyViewController" يؤدي استثناء.

تغيير معرف لوحة العمل إلى اسم مختلف يحل المشكلة.

0
Vladimir Borodko