ios 应用第一次安装取读Settings.bunble默认值问题

问题描述:

当应用第一次安装到设备上时,第一次运行,会读取默认的设置(Settings.bunble),这样会导致应用第一次运行会报错。

解决办法:

在程序的入口的地方加入以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSString *serverAddr = [[NSUserDefaults standardUserDefaults] stringForKey:@"ServerAddr"];
    if(!serverAddr) {
        [self registerDefaultsFromSettingsBundle];
    }
    
    [application registerForRemoteNotificationTypes:
     UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound ];
    NSDate *date = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSString *string = [formatter stringFromDate:date];
    NSLog(@"%@", string);
    [formatter release];
    
    UIViewController *viewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController"
                                                                bundle:nil];
    self.rootViewController = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.rootViewController.navigationBarHidden = YES;
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.rootViewController = self.rootViewController;
    [self.window makeKeyAndVisible];
    return YES;
}
- (void)registerDefaultsFromSettingsBundle {
    NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
    if(!settingsBundle) {
        NSLog(@"Could not find Settings.bundle");
        return;
    }
    
    NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
    
    NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
    for(NSDictionary *prefSpecification in preferences) {
        NSString *key = [prefSpecification objectForKey:@"Key"];
        if(key) {
            [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
        }
    }
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
    [defaultsToRegister release];
}
 

猜你喜欢

转载自zhy584520.iteye.com/blog/1675037