我的iOS应用程序在模拟器中运行良好,但不在真实设备中?

时间:2011-04-12 02:43:16

标签: iphone ios4 ios-simulator

所以我的第一个应用程序是越狱设备。

我必须说它尚未完成,但我相信在开发应用程序时,不时地在真实设备中测试不完整的应用程序是一个好习惯。由于我的应用程序是用于越狱设备,我必须伪造应用程序和所有这些。

问题是,我的应用程序有一个包含两个条目的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)。

1 个答案:

答案 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];
}