NSUserDefaults中的问题

时间:2011-09-09 08:01:04

标签: iphone nsuserdefaults

我正在为工地创建应用。它将首先显示登录页面。当我们输入用户名和密码时,webservice将返回userid作为响应。使用此用户ID,我们可以获得工作。

我想首先放置作业屏幕并检查用户ID是否为null然后打开loginview。如果它不为null,则在tableview中加载作业。当用户首次输入用户名密码时,我使用Nsuserdefaults来保存响应。一切都很好。但是userdefault键在控制台中显示为null但我的条件也是加载输出..这很奇怪,。

我的代码是

-(void)CheckCond{
    NSUserDefaults* storeData = [NSUserDefaults standardUserDefaults];

    NSLog(@"Value for userdefault %@",[storeData objectForKey:@"userId"]);
    NSString *responseValue = [storeData objectForKey:@"userId"];

    NSLog(@"first REsponse value :%@",responseValue);

    if ([responseValue isEqualToString:@""]) {


        [self LoginLogout];


    }
    else
{
    NSLog(@"self.userId %@",self.userId);



        NSUserDefaults* storeData = [NSUserDefaults standardUserDefaults];
        [storeData setObject:self.userId forKey:@"userId"];

        NSLog(@"%@",[storeData objectForKey:@"userId"]);
        [self loadOutput];

    }
}

首次登录的控制台输出是

  

2011-09-09 13:21:29.438 ITClassifiedUniversal [2718:207]第一次回应   价值:(null)2011-09-09 13:21:29.438 ITClassifiedUniversal [2718:207]   self.userId 77533 2011-09-09 13:21:29.438   ITClassifiedUniversal [2718:207] 77533

退出应用程序并重新启动控制台输出后:

  

2011-09-09 13:21:42.044 ITClassifiedUniversal [2731:207]的价值   userdefault(null)2011-09-09 13:21:42.045   ITClassifiedUniversal [2731:207]第一个REsponse值:(null)   2011-09-09 13:21:42.045 ITClassifiedUniversal [2731:207] self.userId   (null)2011-09-09 13:21:42.045 ITClassifiedUniversal [2731:207](null)

AS上面的输出显示用户ID的NSUserdefault为空?什么问题? 此用户ID来自登录视图

// Create and set up job view controller.
                jobView = [[JobViewController alloc] initWithNibName:@"JobView" bundle:nil];
                jobView.userId = self.response;

                // Create a nav controller with job view as its root controller.
                UINavigationController *jobViewNavController = [[UINavigationController alloc] initWithRootViewController:jobView];

                // Present the job view nav controller.
                [self presentModalViewController:jobViewNavController animated:YES];

                [jobView release];
                [jobViewNavController release];

4 个答案:

答案 0 :(得分:1)

    at last add synchronize statement then its give proper value
    NSUserDefaults* storeData = [NSUserDefaults standardUserDefaults];
if ([storeData objectForKey:@"userId"]==nil)
{
            [storeData setObject:self.userId forKey:@"userId"];

    [storeData synchronize];
}

答案 1 :(得分:0)

设置userId后,需要保存默认值:

[storeData synchronize];

这样他们下次就可以拿起来了。

此外,如果您的对象为nil,则它不会向isEqualToString返回YES。你的if语句应该是

if (!responseValue || [responseValue isEqualToString:@""])

答案 2 :(得分:0)

您可以使用以下代码。它可能会提供你所需要的东西。

[[NSUserDefaults standardUserDefaults] setValue:userID forKey:@"userID"];         
[[NSUserDefaults standardUserDefaults] synchronize];

答案 3 :(得分:0)

查看Apple的AppDelegate.m registerDefaults,您就会知道代码出了什么问题。

您尚未使用NSUserDefaults的相应对象和键调用{{1}}。