MFMailComposeViewController Сбои из-за глобальных свойств внешнего вида на iOS6
Я получаю следующий сбой, когда я представляюMFMailComposeViewController
:
2013-11-08 11:04:05.963 <redacted>[7108:1603] *** Assertion failure in NSDictionary *_UIRecordArgumentOfInvocationAtIndex(NSInvocation *, NSUInteger, BOOL)(), /SourceCache/UIKit/UIKit-2380.17/UIAppearance.m:1118
2013-11-08 11:04:06.032 <redacted>[7108:1603] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unknown key, "NSColor" in title text attributes dictionary'
Я отследил это до следующей настройки внешнего вида в моем AppDelegate'sapplication:didFinishLaunchingWithOptions:
метод:
[[UINavigationBar appearance] setTitleTextAttributes:
@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
Комментирование этой строки делает свое дело, но разрушает остальную часть приложения, поэтому я попытался специально установить titleTextAttributes в пустой словарь дляMFMailComposeViewController
:
Попытка № 1
[[UINavigationBar appearanceWhenContainedIn:
NSClassFromString(@"MFMailComposeViewController"), nil]
setTitleTextAttributes:@{ }];
Это приводит к той же аварии. А также
[[UINavigationBar appearanceWhenContainedIn:
NSClassFromString(@"MFMailComposeViewController"), nil]
setTitleTextAttributes:nil];
также приводит к той же аварии.
Попытка № 2
Я заметил, чтоMFMailComposeViewController
этоUINavigationController
так что, возможно, глобальные настройки внешнего вида локализованы для UIViewControllersвнутри UINavigationController. Я собрал некоторый код, чтобы выяснить, какие контроллеры представления находятся внутри MFMailComposeViewController:
for (UIViewController *viewController in mailViewController.viewControllers) {
NSLog(@"%@", NSStringFromClass([viewController class]));
}
Что приводит к выводу:
2013-11-08 11:04:05.936 <redacted>[7108:907] MFMailComposeInternalViewController
Так я попробовал(даже если полагаться на частные контроллеры Apple, это плохая практика):
[[UINavigationBar appearanceWhenContainedIn:
NSClassFromString(@"MFMailComposeViewController"), nil]
setTitleTextAttributes:@{ }];
А также
[[UINavigationBar appearanceWhenContainedIn:
NSClassFromString(@"MFMailComposeViewController"), nil]
setTitleTextAttributes:nil];
Но это все равно приводит к той же аварии!
Попытка № 3
// right before instantiating the MFMailComposeViewController
[[UINavigationBar appearance] setTitleTextAttributes:@{ }];
А также
[[UINavigationBar appearance] setTitleTextAttributes:nil];
Затем восстановление глобальных свойств внешнего вида в блоке завершенияdismissViewController:animated:completion:
Однако такой подход тоже не сработал. Кто-нибудь знает, как установить titleTextAttributes на глобальномUINavigationBar
появление без сбоев MFMailComposeViewController?