Search code examples
ioscrashios7

iOS 7 Only App Crashes at Startup


I recently changed my xcode project to be iOS 7 only instead of supporting iOS 5. After making this change as soon as the app starts I get this message in the console.

-[UICachedDeviceWhiteColor shadowColor]: unrecognized selector sent to instance 0x156f22f0

I'm not sure what is causing this. But using the debugger it seems like my app delegate is crashing at the first line of code.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window.rootViewController = self.tabBarController; //this line is where it crashes

[self.window makeKeyAndVisible];

Any help would be appreciated


Solution

  • You probably did what I did, and overzealously cut and replaced the compiler warnings for UITextAttributeTextShadowColor and UITextAttributeTextShadowOffset. So you had code that looked like this:

    NSDictionary *titleAttributes = @{UITextAttributeTextColor: [UIColor whiteColor],
                                      UITextAttributeTextShadowColor: [UIColor blackColor],
                                      UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(1, 0)],
                                      UITextAttributeFont: [UIFont titleBolder]};
    [[UINavigationBar appearance] setTitleTextAttributes:titleAttributes];
    

    and replaced them both with NSShadowAttributeName, and ended up with some code like this:

    NSDictionary *titleAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],
                                      NSShadowAttributeName: [UIColor blackColor],
                                      NSShadowAttributeName: [NSValue valueWithUIOffset:UIOffsetMake(1, 0)],
                                      NSFontAttributeName: [UIFont titleBolder]};
    [[UINavigationBar appearance] setTitleTextAttributes:titleAttributes];
    

    What you need to do is have one attribute NSShadowAttributeName, and create an instance of NSShadow that contains the shadow color and shadow offset.

    NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor blackColor];
    shadow.shadowOffset = CGSizeMake(1, 0);
    NSDictionary *titleAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],
                                      NSShadowAttributeName: shadow,
                                      NSFontAttributeName: [UIFont titleBolder]};
    [[UINavigationBar appearance] setTitleTextAttributes:titleAttributes];