所以我的第一个应用程序是越狱设备。
我必须说它尚未完成,但我相信在开发应用程序时,不时地在真实设备中测试不完整的应用程序是一个好习惯。由于我的应用程序是用于越狱设备,我必须伪造应用程序和所有这些。
问题是,我的应用程序有一个包含两个条目的plist:一个用于“hasBeenLaunchedBefore”的bool和一个用于“Password”的字符串。当应用程序完成配置时,我的应用程序将更改为TRUE to hasBeenLaunchedBefore,因此当应用程序加载时,它会获得不同的视图。密码很简单:它为用户存储密码。
我认为当我在我的设备中启动应用程序时,我的plist文件没有被修改,因为当应用程序从未启动过时,你会得到一个配置向导。每次我关闭应用程序时,我都会继续获取配置向导,这意味着hasBeenLaunchedBefore不会更改为TRUE,因为它应该是。此外,我的密码永远不会匹配,因此这意味着密码也不会被修改。
在iOS模拟器中一切正常,但在我的iDevice中没有。有人可以帮我一点吗?这可能是权限问题吗?这真的,真的让我没有任何言语或想法来修复它。我猜我可以把plist放在/ Documents中,但我不知道怎么做。所以,如果有人建议我解决这个问题,我将非常感激。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if(![defaults objectForKey:@"first_launch"]){ //Load first_launch from NSUserDefaults. It should be either true or false, but never (null).
[self.window addSubview:configWizard.view];
UIAlertView *lol = [[UIAlertView alloc] initWithTitle:@"Never started before." message:@"The app was never started before." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[lol show];
[lol release];
}else{
[self.window addSubview:tabBarController.view];
UIAlertView *lol = [[UIAlertView alloc] initWithTitle:@"Started before." message:@"The app was started before." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[lol show];
[lol release];
}
[defaults synchronize];
// Add the tab bar controller's view to the window and display.
[self.window makeKeyAndVisible];
return YES;
}
这是我尝试从NSUserDefaults加载时使用的旧代码,但first_launch保持返回(null)。
答案 0 :(得分:2)
嗯。应用程序在设备和模拟器中的行为是不同的。所以你对测试的想法非常正确。我现在不完全(糟糕,但老实说))),但我完全同意你的假设,即问题在于文件权限。
作为解决方案,我建议使用NSUserDefaults。移动,在这种情况下与他们合作应该更容易。
更新
试试这个:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults boolForKey:@"first_launch"]) { // use boolForKey instead objectForKey here
[defaults setBool:YES forKey:@"first_launch"]; // change the value (next time launch is not the first one)
[defaults synchronize]; // you should synchronize only if values were changed
UIAlertView *lol = [[UIAlertView alloc] initWithTitle:@"Never started before."
message:@"The app was never started before." delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[lol show];
[lol release];
} else {
UIAlertView *lol = [[UIAlertView alloc] initWithTitle:@"Started before."
message:@"The app was started before." delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[lol show];
[lol release];
}