加载值从Parse到UISwitch



在我的应用程序中,用户可以使用UISwitch添加值。一旦用户选择了值,该值将在parse中上传到当前用户。当用户返回到用户使用UISwitch选择值的视图时,我希望UISwitch以当前用户上次选择它的方式加载。但是我就是不能让它工作。

我使用这个查询,从currentUser

获取值
PFQuery *query= [PFUser query];
[query whereKey:@"username" equalTo:[[PFUser currentUser]username]];
PFObject *object = [query getFirstObject];

这就是我要输入值的地方

(void)viewDidAppear:(BOOL)animated; { 
[super viewDidAppear:animated];
PFQuery *query= [PFUser query];
[query whereKey:@"username" equalTo:[[PFUser currentUser]username]];
PFObject *object = [query getFirstObject];
NSNumber *logNSNumber = [object valueForKey: @"Active"];
bool switchValue = [logNSNumber boolValue];
BOOL switchValue;
if (switchValue)
{
    switchLog.on = TRUE;
    legoTextView.hidden = NO;    
}
else
{
    switchLog.on = FALSE;
    lTextView.hidden = YES;        
}   
}

这就是我发送布尔值的方式。

   -(IBAction)changeBoolean; {
        Boolean switchVaule;
        if (switchLog.on)
        {
            switchVaule = TRUE;
            logTextView.hidden = NO;
              PFUser *log = [PFUser currentUser];
                log[@"Active"] = @YES;
                 [log saveInBackground]; 
        }
        else
        {
            switchVaule = FALSE;
            logTextView.hidden = YES;
              PFUser *log = [PFUser currentUser];
                log[@"Active"] = @NO;
                 [log saveInBackground];      
            }   
        }

有谁知道如何解决这个问题,这是正确的方法,还是我试图做这个错误的方法?谢谢!

你的代码中有很多地方是错误的。为一个;通过使用您已经拥有的用户对象([PFUser currentUser])中的数据查询当前用户的PFUser对象,您将获得当前用户的PFUser对象。当您登录时,Parse会自动给您这个对象,您不需要查询它。在其中存储一个值:

[[PFUser currentUser] setObject:[NSNumber numberWithBool:YES] forKey:@"Active"];
[[PFUser currentUser] saveInBackground];

获取值:

[[PFUser curentUser] objectForKey:@"Active"];

在您的代码中,您没有在任何地方获得要在交换机中使用的存储值。一个解决办法:

switchLog.on = [[PFUser curentUser] objectForKey:@"Active"];

正如jrturton指出的那样,您的代码中还有许多错字,并且条件处理不太理想。将其清除并尝试使用我提供的代码。