iPhone التنمية - تعطل طلبي عندما أقوم بتغيير الاتجاه

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

  •  19-08-2019
  •  | 
  •  

سؤال

وأنا نتصادم هذه المشكلة حيث يحصل طلبي خطأ EXC_BAD_ACCESS وstucks / توقف. أنا باستخدام "استدارة إلى اليسار" وخيارات "استدارة لليمين" من محاكاة لمحاكاة سلوك تغيير التوجه. ماذا يمكن أن تكون الأسباب المحتملة لهذا الخطأ؟ وبما أنني لست الحصول على تفاصيل حول الخطأ، لا أستطيع أن تعقب عليه.

وجميع الطبقات تحكم بلدي لها:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);    // Return YES for supported orientations
}

وأي أفكار، المؤشرات؟ شكرا.


ولكن قانون بلدي لايوجد الدعوة إلى [UIDevice setOrientation:] طريقة

وهذا هو التتبع التي أحصل في إطار التصحيح:

objc_msgSend
-[UIWindow _handleDeviceOrientationChange:]
_nsnote_callback
__CFXNotificationPost
_CFXNotificationPostNotification
-[NSNotificationCenter postNotificationName:object:userInfo:]
-[UIDevice setOrientation:]
-[UIApplication handleEvent:withNewEvent:]
_[UIApplication sendEvent:]
_UIApplicationHandleEvent 
SendEvent
PurpleEventTimerCallBack
CFRunLoopRunSpecific
CFRunLookRunInMode
GSEventRunModel
GSEventRun
-[UIApplication _run]
UIApplicationMain
main

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

<اقتباس فقرة>   

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


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

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

وهنا هو رمز للإفراج عن تصفح وفتح الملف B:

- (void)openViewB {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES];

    // Remove viewControllerA from the window's view
    [window removeFromSuperview];

    // !-- Commenting out this block fixes the issue --!
    // Release memory wired for viewControllerA view
    if(viewControllerA) {
        [viewControllerA release];
        viewControllerA = nil;
    }       

    // We call window:addSubView to add the viewB to the main window. 
    // You can use this call to add other views as child views not only to windows
    // but to other views as well. (UIWindow is a subclass of UIView).
    [window addSubview:viewControllerB.view];
    [UIView commitAnimations];

    // Override point for customization after application launch
    [window makeKeyAndVisible];
}

ولقد بدأت التطبيق مع قالب شريط التبويب التطبيق، وviewControllerB من نوع UITabBarController. أفعله بالتأكيد شيء خاطئ هنا. أي مؤشرات؟

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

المحلول

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

وهذا الأسلوب لا يساعد shouldrotate إذا حدة التحكم الخاصة بك ليست تزال موجودة.

ويمكن أن تكون اقتراحات rpetrich لا يزال مفيدا لتحديد الكائن الذي حصل على الافراج عنهم.

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

نصائح أخرى

وتعيين نقطة توقف على -[UIDevice setOrientation:] وخطوة من خلال التعليمات البرمجية في المصحح.

لجعل التصحيح أسهل، يمكنك كتابة call (void)instrumentObjcMessageSends(YES) الحق في وحدة المصحح لبدء objc_msgSends التسجيل ل/ تمة / والتنفيذ ثم continue، وسوف تتبع كافة الرسائل التي يتم إرسالها الحق حتى تحطم الطائرة.

وأنا واجهت أيضا نفس المشكلة، وأعتقد إذا تم تحرير viewcontroller باستخدام [الإفراج ViewController] ولكن لا تزال تستخدم طريقة العرض وبحلول ذلك الوقت إذا تغير التوجه تعطل التطبيق.

لديك لمعرفة بالضبط متى يجب الافراج عن viewcontroller [بروبابلي في الخروج].

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