UIApperance和各种崩溃 [英] UIApperance and various crashes

查看:91
本文介绍了UIApperance和各种崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

自定义应用程序时,我感到非常沮丧. 我已经创建并设置了几乎整个应用程序的样式,包括导航栏,工具栏,tabBar等,但是每次MFMailComposeViewController,MFMessageComposerViewController,Twitter或Facebook共享程序甚至QuickLook View Controller出现时,应用程序都会崩溃并显示以下消息:

I'm getting so frustrated while customizing my app. I've already created and styled almost the whole app, including Navigation bar, toolbar, tabBar etc, but everytime a MFMailComposeViewController, a MFMessageComposerViewController, Twitter or Facebook sharers or even a QuickLook View Controller comes in play, the app crashes with the message:

*** Assertion failure in -[UICGColor encodeWithCoder:].
*** Terminating app due to uncaught exception 'NSInternalInconsistencyExceptionì, reason: 'Only RGBA or White color spaces are supported in this situation.'

我已经读到这是因为iOS 6将作曲家作为遥控器进行管理,但是我真的不知道如何解决此问题.

I've read around that this is because iOS 6 manages the composers as Remote Controllers, but I really haven't any idea how to get a fix to this problem.

因此,我不想删除邮件撰写功能或邮件撰写功能.

I don't want to remove the mail composing features or the message composing features because of this.

也有人遇到此错误吗?

我已经写了代码.问题在于,由于自定义UINavigationBars元素,UIAppearance导致应用程序崩溃. 代码.

I already have the code wrote. The problem is that UIAppearance is making the app crash because of the custom UINavigationBars elements. Code.

-(void)message{
    if (_progressHUD){
        [_progressHUD hide:YES];
    }
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init] ;
    [controller setMessageComposeDelegate:self];

    if([MFMessageComposeViewController canSendText])
    {
        controller.body = descriptionString;
        controller.recipients = nil;
        [self presentViewController:controller animated:YES completion:nil];
    }

}

-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
    [self dismissViewControllerAnimated:YES completion:nil];
}

-(void)email {

    if (_progressHUD){
        [_progressHUD hide:YES];
    }

    MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];
    [composer setMailComposeDelegate:self];
    if ([MFMailComposeViewController canSendMail]) {
        [composer setToRecipients:nil];
        [composer setSubject:[NSString stringWithFormat:@"%@",nameString]];

        [composer setMessageBody:[NSString stringWithFormat:@"%@",descriptionString] isHTML:NO];        [composer addAttachmentData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageString]] mimeType:@"png" fileName:imageString];
        [composer setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
        [self presentViewController:composer animated:YES completion:nil];
    }
}


-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    if (error) {
        SIAlertView *alert = [[SIAlertView alloc] initWithTitle:@"Error"
                                                        andMessage:[NSString stringWithFormat:@"Error %@", [error description]]];
        [alert addButtonWithTitle:@"OK" type:SIAlertViewButtonTypeDestructive handler:^(SIAlertView *alertView){}];
        [alert show];
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    else {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
}

外观

- (void)customizeAppearance
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    UINavigationBar Appearance
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBarBackground"] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
    [[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor],
      UITextAttributeTextColor,
      [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0],
      UITextAttributeTextShadowColor,
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
      UITextAttributeTextShadowOffset,
      [UIFont fontWithName:@"HelveticaNeue" size:0.0],
      UITextAttributeFont,
      nil]];

    //ToolBar Appearance
    [[UIToolbar appearance] setTintColor:[UIColor whiteColor]];


    //Switch Appearance
    [[UISwitch appearance] setOnTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"greenBackground"]]];

    //Search Bar Appearance
    [[UISearchBar appearance] setTintColor:[UIColor whiteColor]];

    //Tab Bar Appearance
    [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabBarBackground"]];
    [[UITabBar appearance] setTintColor:[UIColor whiteColor]];
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor, nil] forState:UIControlStateNormal];
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"transparent"]];

}

推荐答案

经过各种调试会话,我整理出导致崩溃的代码行是

After various debugging session, I sorted out that the line of code that was giving me those crashes was

//Switch Appearance
[[UISwitch appearance] setOnTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"greenBackground"]]];

所以我删除了它,一切正常. 显然,我不能直接在AppDelegate中设置外观,但必须在开关所在的类中进行设置.

So I deleted it and everything was working fine. Apparently, I can't set the appearance directly in the AppDelegate, but I had to do it in the class where the switch was in.

refreshControl外观也是如此:必须在tableView的类中进行设置.

Same thing for the refreshControl appearance: had to set it in the tableView's class.

这篇关于UIApperance和各种崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆