Я получаю следующий сбой, когда я представляю MFMailComposeViewController
:MFMailComposeViewController Сбои из-за глобальные свойства Внешнего вида на iOS6
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'
я отслеживал его вниз к следующей настройке внешнего вида в моем application:didFinishLaunchingWithOptions:
методе AppDelegate в:
[[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?
Человек, я не могу поверить, что это было что-то такое немое. Это одно из тех перечислений, которые продолжают двигаться вперед и назад через релизы iOS; Я не могу держать это прямо в моей голове. – paulrehkugler
О, Господи, спасибо, Джонатан! 20 человеко-часов отладки с этим решены. –
Я хотел бы добавить, что та же проблема возникает с QLPreviewController. Он сбой при использовании UIAppearance и NSForegroundColorAttributeName. Использование устаревшего UITextAttributeTextColor отлично работает. – Yanik