سؤال

أواجه مشاكل مع تطبيقي الشامل. لقد قمت بتعيين قاعدة SDK على iPhone 3.2 وقمت بتعيين الهدف على 3.1.

لقد قمت بنقل الملفات التي تستخدم uipopovercontroller إلى ملفاتها الخاصة ولا ينبغي تحميلها عند تحميل التطبيق على iPhone. ومع ذلك ، عندما أقوم بإنشاء تطبيقي ، أحصل على الخطأ التالي عندما أقوم بإنشاء وتصحيح جهازي:

dyld: رمز غير موجود: _OBJC_CLASS _ $ _ UIPOPOVERCONTROLLER المشار إليه من: /var/mobile/applications/B3B90643-92DC- /var/mobile/applications/b3b90643-92dc-4e5c-8b2f-83a42d6d57e0/citybikes.app/citybikes

وأنا آمل حقا شخص يمكن أن تساعدني.

مع أطيب التحيات ، بول بيلن

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

المحلول

حتى لو لم يتم تحميلها في وقت التشغيل ، فلا يزال يتم معالجة هذه الملفات في الارتباط. الرمز _OBJC_CLASS_$_UIPopoverController لذلك يتم إضافته في تطبيقك كواحد من تلك التي تتطلب ربط ديناميكي.

هناك 2 حلول ،

  1. استبدل كل ظهور uipopovercontroller في رسالة (على سبيل المثال [UIPopoverController alloc]) مع NSClassFromString(@"UIPopoverController"), أو
  2. اجعل Uikit مرتبطًا بشكل ضعيف.

نصائح أخرى

أنا أوصيك بشدة ليس ارتباط ضعيف Uikit. كما ذكرت Kennytm في تعليقاتنا ، قد يخفي ذلك قضايا الارتباط المستقبلية ويؤدي إلى تعطل. أنا أيضًا لست مرتاحًا لإخبار الرابط بأن Uikit اختياري عندما لا يكون ذلك واضحًا. اختراق كبير.

بدلاً من ذلك ، قم بتهيئة واتصال UipopoverController بشكل غير مباشر باستخدام NSClassFromString:

Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    self.myPopover = [[popover alloc] initWithContentViewController:myContent];
}

إذا كان لا يزال لديك أخطاء في الارتباط ، فقد تحتاج إلى استدعاء رسائل UipopoverController باستخدام nsselectorfromstring:

Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
    SEL myInit = NSSelectorFromString(@"initWithContentViewController:");
    self.myPopover = [[popover alloc] performSelector:myInit withObject:myContent];
}

لقابلية النقل ، أوصي بكتابة كائن وكيل للتعامل مع تفاصيل التنفيذ هذه.

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