Saving Automatically in NSStrings

Go To StackoverFlow.com

2

I have three text fields: first name, last name, and age, also a photo. What can I do so that the information saves automatically, so that i dont have to click a button?

This is my 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

This is my 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];

}
2012-04-05 16:08
by Santiago Fabregat


2

you will have to work with the <UITextFieldDelegate> protocol

Reference: UITextFieldDelegate Protocol

you will have to set

textField.delegate = yourViewController

and can then work with the protocol functions, that handle input and character changing of your textview.

for example you cound use

- (BOOL)textFieldShouldReturn:(UITextField *)textField

to save the textfield content when the user presses the return button =)

EDIT: probably this method is better suited for your needs - i was a bit tired yesterday when writing the post =)

- (void)textFieldDidEndEditing:(UITextField *)textField {
    //save your textfied.text string here :)
}
2012-04-05 16:18
by Sebastian Flückiger
Considering his question - (void)textFieldDidEndEditing:(UITextField *)textField might be more appropriate - sosborn 2012-04-06 06:18
agreed :) i didnt have much time & wanted to givehim a quick overview - Sebastian Flückiger 2012-04-06 06:58


0

You need to set the delegate of the UITextfield to the view controller in your viewDidLoad method like

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

Your view controller needs to implement the UITextFieldDelegate Protocol method:

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

This will save only after the text is done editing. If you want to save as the user is typing, use

- (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;
}
2012-04-06 06:21
by MadhavanRP
Ads