问题描述:
当应用第一次安装到设备上时,第一次运行,会读取默认的设置(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]; }