2013-11-21 3 views
0

У меня возникла проблема при тестировании моего приложения в iOS7. Приложение в настоящее время отлично работает в iOS5 и iOS6. Основываясь на трассировке стека, кажется, что частный метод вызывает проблему.Сбой с пользовательским контроллером навигации

2013-11-21 17:00:56.565 MyApp[706:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An override of -[UINavigationController navigationBar] is returning an object that is not a kind of UINavigationBar' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0244d5e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x01eee8b6 objc_exception_throw + 44 
    2 CoreFoundation      0x0244d3bb +[NSException raise:format:] + 139 
    3 UIKit        0x00af796c -[UINavigationController _confirmBarAccessMethods] + 277 
    4 UIKit        0x00af7b19 -[UINavigationController initWithNibName:bundle:] + 271 
    5 MyApp        0x000b8bd8 -[CustomUINavigationController initWithNibName:bundle:] + 152 
    6 UIKit        0x00af77b3 -[UINavigationController initWithRootViewController:] + 86 
    7 MyApp        0x000b8ea1 -[CustomUINavigationController initWithRootViewController:] + 113 
    8 MyApp        0x0000260a -[AppDelegate application:didFinishLaunchingWithOptions:] + 666 
    9 UIKit        0x009c7355 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 309 
    10 UIKit        0x009c7b95 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1536 
    11 UIKit        0x009cc3a8 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824 
    12 UIKit        0x009e087c -[UIApplication handleEvent:withNewEvent:] + 3447 
    13 UIKit        0x009e0de9 -[UIApplication sendEvent:] + 85 
    14 UIKit        0x009ce025 _UIApplicationHandleEvent + 736 
    15 GraphicsServices     0x0478b2f6 _PurpleEventCallback + 776 
    16 GraphicsServices     0x0478ae01 PurpleEventCallback + 46 
    17 CoreFoundation      0x023c8d65 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53 
    18 CoreFoundation      0x023c8a9b __CFRunLoopDoSource1 + 523 
    19 CoreFoundation      0x023f377c __CFRunLoopRun + 2156 
    20 CoreFoundation      0x023f2ac3 CFRunLoopRunSpecific + 467 
    21 CoreFoundation      0x023f28db CFRunLoopRunInMode + 123 
    22 UIKit        0x009cbadd -[UIApplication _run] + 840 
    23 UIKit        0x009cdd3b UIApplicationMain + 1225 
    24 MyApp        0x00002337 main + 295 
    25 MyApp        0x00002205 start + 53 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Этот сбой происходит только при тестировании в iOS7. Это происходит, как только вызывается [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]. Я не могу найти информацию о _confirmBarAccessMethods. Я предполагаю, что это частный метод UINavigationController.

Вот файл заголовка для CustomUINavigationController класса:

#import <UIKit/UIKit.h> 
#import "CustomUINavigationBar.h" 

@interface CustomUINavigationController : UINavigationController 
{ 
    CustomUINavigationBar *customNavigationBar; 
} 

@property (nonatomic, retain) UIColor *titleColor; 

@end 

Это метод инициализации, в котором происходит сбой приложения:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; // This line causes the application to crash 
    if (self) { 
     customNavigationBar = [[CustomUINavigationBar alloc] init]; 
     [customNavigationBar setTintColor:[UIColor colorWithWhite:0.0 alpha:1.0]]; 
     [customNavigationBar setItems:[NSArray array] animated:NO]; 
     [customNavigationBar setDelegate:self]; 

     self.titleColor = [UIColor colorWithWhite:1.0 alpha:1.0]; 
    } 
    return self; 
} 

Вот файл заголовка для CustomNavigationBar:

#import <UIKit/UIKit.h> 

@interface CustomUINavigationBar : UINavigationBar 
{ 
UIImage *background; 
} 

@end 

Любая помощь была бы принята с благодарностью. При необходимости я могу предоставить дополнительную информацию.

EDIT: Добавлен след от предложенного решения с использованием пользовательских навигационных бар инициализатору

2013-11-22 13:04:49.756 MyApp[390:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An override of -[UINavigationController navigationBar] is returning an object that is not a kind of UINavigationBar' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0244d5e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x01eee8b6 objc_exception_throw + 44 
    2 CoreFoundation      0x0244d3bb +[NSException raise:format:] + 139 
    3 UIKit        0x00af796c -[UINavigationController _confirmBarAccessMethods] + 277 
    4 UIKit        0x00af7b19 -[UINavigationController initWithNibName:bundle:] + 271 
    5 MyApp        0x000b8e38 -[CustomUINavigationController initWithNibName:bundle:] + 152 
    6 UIKit        0x00af7815 -[UINavigationController initWithNavigationBarClass:toolbarClass:] + 52 
    7 MyApp        0x00002868 -[AppDelegate application:didFinishLaunchingWithOptions:] + 712 
    8 UIKit        0x009c7355 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 309 
    9 UIKit        0x009c7b95 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1536 
    10 UIKit        0x009cc3a8 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824 
    11 UIKit        0x009e087c -[UIApplication handleEvent:withNewEvent:] + 3447 
    12 UIKit        0x009e0de9 -[UIApplication sendEvent:] + 85 
    13 UIKit        0x009ce025 _UIApplicationHandleEvent + 736 
    14 GraphicsServices     0x0478b2f6 _PurpleEventCallback + 776 
    15 GraphicsServices     0x0478ae01 PurpleEventCallback + 46 
    16 CoreFoundation      0x023c8d65 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53 
    17 CoreFoundation      0x023c8a9b __CFRunLoopDoSource1 + 523 
    18 CoreFoundation      0x023f377c __CFRunLoopRun + 2156 
    19 CoreFoundation      0x023f2ac3 CFRunLoopRunSpecific + 467 
    20 CoreFoundation      0x023f28db CFRunLoopRunInMode + 123 
    21 UIKit        0x009cbadd -[UIApplication _run] + 840 
    22 UIKit        0x009cdd3b UIApplicationMain + 1225 
    23 MyApp        0x00002567 main + 295 
    24 MyApp        0x00002435 start + 53 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 
+0

Является ли CustomUIBavigationBar подклассом UINavigationBar? –

+0

Да, я добавлю определение класса в вопрос для ясности. – Alex

ответ

0

Я, наконец, решил проблему. CustomerUINavigationController имел метод переопределения для аксессуара navigationBar. Он пытался вернуть нулевую стоимость. Я удалил это, и приложение было скомпилировано и запущено без проблем.

0

Создание навигационного контроллера с initWithNavigationBarClass:toolbarClass: и поставить свой собственный класс навигационной панели. Затем выполните любую конфигурацию, требуемую для экземпляра, созданного для вас суперклассом навигационного контроллера.

+0

Я изменил 'myNavController = init [[CustomUINavigationController alloc] initWithRootViewController: myViewController];' to 'myNavController = [[CustomUINavigationController alloc] initWithNavigationBarClass: [CustomUINavigationBar class] toolbarClass: nil];' и это привело к той же ошибке. – Alex

+0

Точно такое же исключение? – Wain

+0

Да, точно такая же трассировка стека. – Alex

Смежные вопросы