在NSStrings中自动保存

时间:2012-04-05 16:08:49

标签: ios xcode nsstring nsuserdefaults

我有三个文本字段:名字,姓氏和年龄,还有照片。我该怎么办才能自动保存信息,这样我就不必点击按钮了?

这是我的ViewController.h

#import <UIKit/UIKit.h>

@interface ContactViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> {

    IBOutlet UIImageView *contactImageView;
    IBOutlet UITextField *firstNameTextField;
    IBOutlet UITextField *lastNameTextField;
    IBOutlet UITextField *ageTextField;
}

- (IBAction)save:(id)sender;
- (IBAction)chooseImage:(id)sender;

@end

这是我的ViewController.m

- (void)viewDidLoad {
[super viewDidLoad];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSString *frontName = [defaults objectForKey:@"firstname"];
    NSString *lastName = [defaults objectForKey:@"lastname"];

    int age = [defaults integerForKey:@"age"];
    NSString *ageString = [NSString stringWithFormat:@"%i",age];

    NSData *imageData = [defaults dataForKey:@"image"];
    UIImage *contactImage = [UIImage imageWithData:imageData];

    firstNameTextField.text = frontName;
    lastNameTextField.text = lastName;
    ageTextField.text = ageString;
    contactImageView.image = contactImage;
}


- (void)viewDidUnload {

    [contactImageView release];
    contactImageView = nil;
    [firstNameTextField release];
    firstNameTextField = nil;
    [lastNameTextField release];
    lastNameTextField = nil;
    [ageTextField release];
    ageTextField = nil;
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)save:(id)sender  {
    [firstNameTextField resignFirstResponder];
    [lastNameTextField resignFirstResponder];
    [ageTextField resignFirstResponder];

    // Create strings and integer to store the text info
    NSString *frontName = [firstNameTextField text];
    NSString *lastName = [lastNameTextField text];
    int age = [[ageTextField text] integerValue];

    UIImage *contactImage = contactImageView.image;
    NSData *imageData = UIImageJPEGRepresentation(contactImage, 100);


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:frontName forKey:@"firstname"];
    [defaults setObject:lastName forKey:@"lastname"];
    [defaults setInteger:age forKey:@"age"];
    [defaults setObject:imageData forKey:@"image"];

    [defaults synchronize];

    NSLog(@"Data saved");
}

- (IBAction)chooseImage:(id)sender {
    UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentModalViewController:picker animated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
   contactImageView.image = image;

    [picker dismissModalViewControllerAnimated:YES];
}


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

   [picker dismissModalViewControllerAnimated:YES];

}

2 个答案:

答案 0 :(得分:2)

您必须使用<UITextFieldDelegate>协议

参考:UITextFieldDelegate Protocol

你必须设置

textField.delegate = yourViewController

然后可以使用协议函数来处理textview的输入和字符更改。

例如你可以使用

- (BOOL)textFieldShouldReturn:(UITextField *)textField

当用户按下返回按钮时保存文本字段内容=)

编辑:可能这种方法更适合你的需要 - 我昨天写帖子时有点累了=)

- (void)textFieldDidEndEditing:(UITextField *)textField {
    //save your textfied.text string here :)
}

答案 1 :(得分:0)

您需要在UITextfield方法中将viewDidLoad的委托设置为视图控制器,如

firstNameTextField.delegate = self;
lastNameTextField.delegate = self;
ageTextField.delegate = self;

您的视图控制器需要实现UITextFieldDelegate协议方法:

- (void)textFieldDidEndEditing:(UITextField *)textField {
    //Do save Operations here
}

仅在文本编辑完成后才会保存。如果要在用户键入时保存,请使用

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *stringToSave=[textField.text stringByReplacingCharactersInRange:range withString:string];
    //Identify text field by comparing textField with you text fields and do save operations
    return YES;
}