2014-04-01 198 views
0

你如何讓用戶更改密碼,郵件,用戶名等任何想法?到目前爲止,我有這個代碼,你可以在下面看到。我的問題是舊數據不顯示,我不能更新它。我會喜歡一些幫助! :)非常感謝更改密碼PFuser

#import <UIKit/UIKit.h> 
#import <Parse/Parse.h> 
#import <MobileCoreServices/UTCoreTypes.h> 
#import <QuartzCore/QuartzCore.h> 

@interface SettingsUPEViewController : UIViewController <UITextFieldDelegate> 




@property (strong, nonatomic) IBOutlet UITextField *usernameField; 

@property (strong, nonatomic) IBOutlet UITextField *passwordField; 
//@property (strong, nonatomic) IBOutlet UITextField *password2Field; 
@property (strong, nonatomic) IBOutlet UITextField *mailField; 
- (IBAction)updateSave:(id)sender; 

@end 





#import "SettingsUPEViewController.h" 

@interface SettingsUPEViewController() 


@end 

@implementation SettingsUPEViewController 


NSArray *retriveFormParse; 
NSArray *profileArray; 


- (id)initWithCoder:(NSCoder *)aCoder 
{ 
    self = [super initWithCoder:aCoder]; 
    if (self) { 

     PFQuery *query= [PFUser query]; 

     [query whereKey:@"username" equalTo:[[PFUser currentUser]username]]; 



     [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
      if (!error) { 

       profileArray = [[NSArray alloc] initWithArray:objects]; 






       // The find succeeded. 
       NSLog(@"@%", objects.count); 
       // Do something with the found objects 
       for (PFObject *object in objects) { 
        NSLog(@"%@", objects); 
       } 
      } else { 
       // Log details of the failure 
       NSLog(@"Error: %@ %@", error, [error userInfo]); 
      } 
     }]; 



    } 
    return self; 
} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 



    PFQuery *query= [PFUser query]; 

    [query whereKey:@"username" equalTo:[[PFUser currentUser]username]]; 

    PFObject *object = [query getFirstObject]; // synchronous request, not ideal, look at getFirstObjectInBackgroundWithBlock 

    _usernameField.text = [object valueForKey:@"newname"]; 
    _passwordField.text = [object valueForKey:@"newpassword"]; 
    _mailField.text = [object valueForKey:@"newmail"]; 

    _usernameField.delegate = self; 
    _passwordField.delegate = self; 
    _mailField.delegate = self; 



    _usernameField.delegate = self; 
    _passwordField.delegate = self; 
    _mailField.delegate = self; 



    _usernameField.layer.masksToBounds=YES; 
    _usernameField.layer.borderColor=[[UIColor whiteColor]CGColor]; 
    _usernameField.layer.borderWidth= 1.0f; 

    _passwordField.layer.masksToBounds=YES; 
    _passwordField.layer.borderColor=[[UIColor whiteColor]CGColor]; 
    _passwordField.layer.borderWidth= 1.0f; 


    //_password2Field.layer.masksToBounds=YES; 
    //_password2Field.layer.borderColor=[[UIColor whiteColor]CGColor]; 
    //_password2Field.layer.borderWidth= 1.0f; 


    _mailField.layer.masksToBounds=YES; 
    _mailField.layer.borderColor=[[UIColor whiteColor]CGColor]; 
    _mailField.layer.borderWidth= 1.0f; 




    _usernameField.delegate = self; 
    _passwordField.delegate = self; 
    _mailField.delegate = self; 

} 


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

/* 
#pragma mark - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 
*/ 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 18) ? NO : YES; 
} 

- (void) retriveFromParse { 

    PFQuery *query= [PFUser query]; 

    [query whereKey:@"username" equalTo:[[PFUser currentUser]username]]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     if (!error) { 
      // The find succeeded. 
      NSLog(@"@%", objects.count); 
      // Do something with the found objects 
      for (PFObject *object in objects) { 
       NSLog(@"%@", objects); 
      } 
     } else { 
      // Log details of the failure 
      NSLog(@"Error: %@ %@", error, [error userInfo]); 
     } 
    }]; 

} 

- (IBAction)updateSave:(id)sender { 
    // Create PFObject with recipe information 
    PFUser *profile = [PFUser currentUser]; 
    [profile setObject:_usernameField.text forKey:@"newname"]; 
    [profile setObject:_passwordField.text forKey:@"newpassword"]; 
    [profile setObject:_mailField.text forKey:@"newmail"]; 




    // Upload recipe to Parse 
    [profile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 


     if (!error) { 
      // Show success message 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Upload Complete" message:@"Successfully saved profile" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
      [alert show]; 

      // Notify table view to reload the profile from Parse cloud 

      // Dismiss the controller 
      // [self dismissViewControllerAnimated:YES completion:nil]; 
      [self performSegueWithIdentifier:@"nameSet" sender:self]; 

     } else { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Upload Failure" message:[error localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
      [alert show]; 

     } 

    }]; 

} 


/// if(![oldPassword.text isEqualToString:[user password]]){ 
///  [alertMessagePassword setMessage:@"The old password is incorrect!"]; 
///  [alertMessagePassword show]; 





#pragma mark - Textfield delegate 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 




@end 

回答

0

不要查詢用戶對象。你已經有一個在[PFUser currentUser];你可以從這個對象直接字段:

PFUser curUser = [PFUser currentUser]; 
_usernameField.text = [curUser valueForKey:@"username"]; 

或者乾脆

_usernameField.text = curUser[@"username"]; 

updateSave方法是正確的,但我不知道爲什麼你使用「NEWMAIL」,「新密碼「等我猜你想在這裏使用」密碼「,」用戶名「等,除非你想設置一個名爲」新名稱「的用戶配置文件...

+0

謝謝你這麼吃@handsomeguy! 我將它改爲: 'PFUser * curUser = [PFUser currentUser]; _usernameField.text = [curUser valueForKey:@「username」]; _passwordField.text = [curUser valueForKey:@「password」]; _mailField.text = [curUser valueForKey:@「email」]; _usernameField.text = curUser [@「username」]; _passwordField.text = curUser [@「password」]; _mailField.text = curUser [@「email」]; ' 我也拿走了newpassword等它更好地工作,但我得到這個錯誤:錯誤:用戶可能沒有密碼字段(代碼:105,版本:1.2.18) – TheNiceOne

+0

我想你沒有從這個上面的代碼,但從你更新密碼的代碼?沒有閱讀它? – Moonwalkr

+0

你的意思是這個代碼? (IBAction)updateSave:(id)sender //使用配方信息創建PFObject PFUser * profile = [PFUser currentUser]; [profile setObject:_usernameField.text forKey:@「name」]; [profile setObject:_passwordField.text forKey:@「password」]; [profile setObject:_mailField.text forKey:@「email」];' ----- – TheNiceOne

1

你的代碼看起來不錯。只有這應該工作:

[PFUser currentUser].password = someTextField.text; 

但有些時候XCode緩存數據。清理你的項目,然後嘗試再次構建。

+0

謝謝我編輯我的問題與完整的代碼,所以你可能會看到,如果有什麼我可以做.. – TheNiceOne

+0

認爲你有解決方案。祝你好運。 :) – Rashad

+0

是的!謝謝你 – TheNiceOne