Tuesday, 12 February 2013

ID Profile Source Code- DetailView Controller


//.h



#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController{
    
    IBOutlet UITableView *myTable;
    NSMutableArray *categoryArray;
    
    NSMutableArray *imageArray;
    NSMutableArray *nameArray;
    NSMutableArray *distrctArray;
    NSMutableArray *emailArray;
    NSMutableArray *mobileArray;
    
    
        
    NSUserDefaults *currentDefaults;
    
    NSData *ImageData1;
    
    int q;
}


@end

//.m

#import "DetailViewController.h"
#import "TableViewCell.h"



@implementation DetailViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    currentDefaults = [NSUserDefaults standardUserDefaults];
    
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedName"];
    NSMutableArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    nameArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    NSLog(@"name-- %d",[nameArray count]);
    
    NSData *dataRepresentingSavedArray0 = [currentDefaults objectForKey:@"savedImage"];
    NSMutableArray *oldSavedArray0 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray0];
    imageArray = [[NSMutableArray alloc] initWithArray:oldSavedArray0];
    NSLog(@"image-- %d",[imageArray count]);
    
    NSData *dataRepresentingSavedArray1 = [currentDefaults objectForKey:@"savedDt"];
    NSMutableArray *oldSavedArray1 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray1];
    distrctArray = [[NSMutableArray alloc] initWithArray:oldSavedArray1];
    NSLog(@"distrct-- %d",[distrctArray count]);
    
    NSData *dataRepresentingSavedArray2 = [currentDefaults objectForKey:@"savedEmail"];
    NSMutableArray *oldSavedArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray2];
    emailArray = [[NSMutableArray alloc] initWithArray:oldSavedArray2];
    NSLog(@"email-- %d",[emailArray count]);
    
    NSData *dataRepresentingSavedArray3 = [currentDefaults objectForKey:@"savedMobile"];
    NSMutableArray *oldSavedArray3 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray3];
    mobileArray = [[NSMutableArray alloc] initWithArray:oldSavedArray3];
    NSLog(@"mobile-- %d",[mobileArray count]);
    
  
}
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    //   [self.navigationController.navigationBar setAlpha:1.0];
    
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [nameArray count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 85;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     
    static NSString *cellID= @"TableViewCell";
    TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellID];
    
    if(cell==nil)
    {
        
        
        NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:nil options:nil];
        
        for(id currentObject in nibObjects)
        {
            if([currentObject isKindOfClass: [TableViewCell class]])
            {
                cell = (TableViewCell *)currentObject;
            }
            
        }
    }
    
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(250, 50, 49, 19);
    //[button setBackgroundColor:[UIColor clearColor]];
    UIImage *buttonImage = [UIImage imageNamed:@"DoneN.png"];
    [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
    
    [button addTarget:self action:@selector(del:)forControlEvents:UIControlEventTouchUpInside];
    button.tag = indexPath.row;
    [cell.contentView addSubview:button];
    
    
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
    button1.frame = CGRectMake(250, 15, 50, 20);
    [button1 setBackgroundColor:[UIColor clearColor]];
    
    UIImage *buttonImage1 = [UIImage imageNamed:@"edit.png"];
    [button1 setBackgroundImage:buttonImage1 forState:UIControlStateNormal];
    
    
    [button1 addTarget:self action:@selector(edit:)forControlEvents:UIControlEventTouchUpInside];
    button1.tag = indexPath.row;
    [cell.contentView addSubview:button1];
    
    // Configure the cell.
    cell.title1.text=[nameArray objectAtIndex:indexPath.row];
    cell.subTitle1.text=[distrctArray objectAtIndex:indexPath.row];
    NSData *imgData = (NSData*)[imageArray objectAtIndex:indexPath.row];
    UIImage* imge = [[UIImage alloc] initWithData:imgData];
    cell.img1.image=imge;
        
    return cell;
}
-(void)del:(id)sender
{

    UIButton *tappedButton = (UIButton*)sender;
    q=tappedButton.tag;
    
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Are you sure to delete this Profile?" message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"Don't Allow", nil];
    [alert show];
  
    
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    
if (buttonIndex == 0) {
      
        NSLog(@"Tag--%d",q);
        
        [nameArray removeObjectAtIndex:q];
        [imageArray removeObjectAtIndex:q];
        [distrctArray removeObjectAtIndex:q];
        [emailArray removeObjectAtIndex:q];
        [mobileArray removeObjectAtIndex:q];
    
        [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:imageArray] forKey:@"savedImage"];
        [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:nameArray] forKey:@"savedName"];
        [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:distrctArray] forKey:@"savedDt"];
        [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:emailArray] forKey:@"savedEmail"];
        [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:mobileArray] forKey:@"savedMobile"];

        [[NSUserDefaults standardUserDefaults] synchronize];
    
        [myTable reloadData];
        [self.view setNeedsDisplay];
    }
if (buttonIndex == 1) {
        NSLog(@"button");
    }
    
    
}
-(void)edit:(id)sender{
    
    UIButton *tappedButton = (UIButton*)sender;
    q=tappedButton.tag;
    NSString *index=[NSString stringWithFormat:@"%d",q];
    [currentDefaults setObject:index forKey:@"edit"];
    [self.navigationController popViewControllerAnimated:YES];
    
}

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

@end

ID Profile Source Code- MasterViewController


//.h
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface MasterViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIPrintInteractionControllerDelegate>{
    

    
    IBOutlet UITextField *nameField;
    IBOutlet UITextField *districtField,*emailField,*mobileField;
    
   IBOutlet UIImageView * imageView;
    NSMutableArray *imageArray;
    NSMutableArray *nameArray;
    NSMutableArray *distrctArray;
    NSMutableArray *emailArray;
    NSMutableArray *mobileArray;
    
    
    NSUserDefaults *currentDefaults;
    int p;
}



-(IBAction)photoButton:(id)sender;
-(IBAction)SaveButton:(id)sender;
-(IBAction)list:(id)sender;

@end

//.m

CGFloat animatedDistance;
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;

#import "MasterViewController.h"

#import "DetailViewController.h"

#import "Base64.h"


@implementation MasterViewController
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    // signup.enabled=NO;
    CGRect textFieldRect =
    [self.view.window convertRect:textField.bounds fromView:textField];
    CGRect viewRect =
    [self.view.window convertRect:self.view.bounds fromView:self.view];
    
    
    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
    CGFloat numerator =
    midline - viewRect.origin.y
    - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
    CGFloat denominator =
    (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)
    * viewRect.size.height;
    CGFloat heightFraction = numerator / denominator;
    
    if (heightFraction < 0.0)
    {
        heightFraction = 0.0;
    }
    else if (heightFraction > 1.0)
    {
        heightFraction = 1.0;
    }
    
    UIInterfaceOrientation orientation =
    [[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIInterfaceOrientationPortrait ||
        orientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
    }
    else
    {
        animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
    }
    
    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y -= animatedDistance;
    
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
    
    [self.view setFrame:viewFrame];
    
    [UIView commitAnimations];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y += animatedDistance;
    
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
    
    [self.view setFrame:viewFrame];
    
    [UIView commitAnimations];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if(textField == nameField) {
[districtField becomeFirstResponder];
}
else if(textField == districtField) {
[emailField becomeFirstResponder];
}
    else if(textField == emailField) {
[mobileField becomeFirstResponder];
}
    else if(textField == mobileField) {
[mobileField resignFirstResponder];
}
return YES;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    currentDefaults = [NSUserDefaults standardUserDefaults];
       
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSData *dataRepresentingSavedArray0 = [currentDefaults objectForKey:@"savedImage"];
    NSMutableArray *oldSavedArray0 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray0];
    imageArray = [[NSMutableArray alloc] initWithArray:oldSavedArray0];
    NSLog(@"image-- %d",[imageArray count]);
    
    
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedName"];
    NSMutableArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    nameArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    NSLog(@"name-- %d",[nameArray count]);
    
    NSData *dataRepresentingSavedArray1 = [currentDefaults objectForKey:@"savedDt"];
    NSMutableArray *oldSavedArray1 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray1];
    distrctArray = [[NSMutableArray alloc] initWithArray:oldSavedArray1];
    NSLog(@"distrct-- %d",[distrctArray count]);
    
    NSData *dataRepresentingSavedArray2 = [currentDefaults objectForKey:@"savedEmail"];
    NSMutableArray *oldSavedArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray2];
    emailArray = [[NSMutableArray alloc] initWithArray:oldSavedArray2];
    NSLog(@"email-- %d",[emailArray count]);
    
    NSData *dataRepresentingSavedArray3 = [currentDefaults objectForKey:@"savedMobile"];
    NSMutableArray *oldSavedArray3 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray3];
    mobileArray = [[NSMutableArray alloc] initWithArray:oldSavedArray3];
    NSLog(@"mobile-- %d",[mobileArray count]);
    
    if([currentDefaults objectForKey:@"edit"]){
    NSString *index=[currentDefaults valueForKey:@"edit"];
     p=[index intValue];
    NSLog(@"Hi- %d",p);
        NSData *imgData = (NSData*)[imageArray objectAtIndex:p];
        UIImage* imge = [[UIImage alloc] initWithData:imgData];
        imageView.image=imge;
        nameField.text=[nameArray objectAtIndex:p];
        districtField.text=[distrctArray objectAtIndex:p];
        emailField.text=[emailArray objectAtIndex:p];
        mobileField.text=[mobileArray objectAtIndex:p];
    }
    
}
-(IBAction)photoButton:(id)sender{
    
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Use photo from:"
                                                             delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Camera",@"Library",nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
    [actionSheet showInView:self.view ];
    
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    
    UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
if (buttonIndex == 0) {
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
          [self presentViewController:picker animated:YES completion:nil];
        
} else if (buttonIndex == 1) {
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
          [self presentViewController:picker animated:YES completion:nil];
    }
  
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissViewControllerAnimated:YES completion:nil];
imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    
}

-(IBAction)SaveButton:(id)sender{
    [mobileField resignFirstResponder];
    
    NSString *msgStr = @"";
BOOL bErr = NO;
    NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
    
    if(imageView.image==[UIImage imageNamed:@"noimage.jpeg"]) {
msgStr = @"Choose an Image";
bErr = YES;
    }
    else if(nameField.text.length == 0) {
msgStr = @"Please provide your name";
bErr = YES;
[nameField becomeFirstResponder];
}
else if(districtField.text.length == 0) {
msgStr = @"Please provide your District";
bErr = YES;
[districtField becomeFirstResponder];
}else if(emailField.text.length == 0) {
msgStr = @"Please provide your email";
bErr = YES;
[emailField becomeFirstResponder];
}
    
    
    else if ([emailTest evaluateWithObject:emailField.text] == NO)
    {
        
        msgStr = @"Invalid Email Id! Please try again";
bErr = YES;
[emailField becomeFirstResponder];
    }
    
    
if(bErr) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:msgStr delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
//[alert release];
return;
}
    
    NSData *ImageData1 = UIImageJPEGRepresentation(imageView.image, 0.9);
    
     if([currentDefaults objectForKey:@"edit"]){
        NSLog(@"Hiqqq- %d",p);
         [imageArray replaceObjectAtIndex:p withObject:ImageData1];
         [nameArray replaceObjectAtIndex:p withObject:nameField.text];
         [distrctArray replaceObjectAtIndex:p withObject:districtField.text];
         [emailArray replaceObjectAtIndex:p withObject:emailField.text];
         [mobileArray replaceObjectAtIndex:p withObject:mobileField.text];
    }else{
    
    [imageArray addObject:ImageData1];
    [nameArray addObject:nameField.text];
    [distrctArray addObject:districtField.text];
    [emailArray addObject:emailField.text];
    [mobileArray addObject:mobileField.text];
    }
    
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:imageArray] forKey:@"savedImage"];
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:nameArray] forKey:@"savedName"];
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:distrctArray] forKey:@"savedDt"];
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:emailArray] forKey:@"savedEmail"];
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:mobileArray] forKey:@"savedMobile"];
     //[[NSUserDefaults standardUserDefaults] synchronize];
    [self print];
    
    imageView.image=[UIImage imageNamed:@"noimage.jpeg"];
    nameField.text=@"";
    districtField.text=@"";
    emailField.text=@"";
    mobileField.text=@"";
  
}

-(void)print{
    
        
   
    if (![UIPrintInteractionController isPrintingAvailable]) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Printer Availability Error Title", @"")
                                                             message:NSLocalizedString(@"Printer Availability Error Message", @"")
                                                            delegate:nil
                                                   cancelButtonTitle:NSLocalizedString(@"OK", @"OK")
                                                   otherButtonTitles:nil];
        [alertView show];
        return;
    }
    
    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    
    if(!pic) {
        NSLog(@"Couldn't get shared UIPrintInteractionController!");
        return;
    }
    
    pic.delegate = self;
    
    UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    printInfo.outputType = UIPrintInfoOutputGeneral;
    printInfo.jobName = @"Sample";
    pic.printInfo = printInfo;
    
    NSString *htmlString = [self prepareHTMLText];
    UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:htmlString];
    htmlFormatter.startPage = 0;
    htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1-inch margins on all sides
    htmlFormatter.maximumContentWidth = 6 * 72.0;   // printed content should be 6-inches wide within those margins
    pic.printFormatter = htmlFormatter;
    
    pic.showsPageRange = YES;
    
    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
        
        if (!completed && error) {
            NSLog(@"Printing could not complete because of error: %@", error);
        }
    };
    
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        // [pic presentFromBarButtonItem:self.myPrintBarButton animated:YES completionHandler:completionHandler];
        
    } else {
        [pic presentAnimated:YES completionHandler:completionHandler];
    }

    
}
    
    
- (NSString *)prepareHTMLText {
   
    NSMutableString *body = [NSMutableString stringWithString:@"<!DOCTYPE html><html><body>"];
    NSString *str1 = [Base64 encode:UIImagePNGRepresentation(imageView.image)];
    
    [body appendString:@"<h2>ID Card</h2>"];
    [body appendFormat:@"<img src=\"data:image/png;base64,%@\" alt=\"\" height=\"100\" width=\"100\"/>",str1];
    
    [body appendFormat:@"<p>%@ %@</p>", nameField.text, districtField.text];
   
    [body appendString:@"</body></html>"];
    return body;
}


-(IBAction)list:(id)sender{
    DetailViewController *anotherViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"anotherViewController22"];
    
   // [UIView beginAnimations:nil context:NULL];
    
   // [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:YES];
    //[UIView setAnimationDuration:.8];
    [self.navigationController pushViewController:anotherViewController animated:YES];
    //[anotherViewController release];
    //[UIView commitAnimations];
    [[NSUserDefaults standardUserDefaults]removeObjectForKey:@"edit"];
    imageView.image=[UIImage imageNamed:@"noimage.jpeg"];
    nameField.text=@"";
    districtField.text=@"";
    emailField.text=@"";
    mobileField.text=@"";
}


@end



Moving from one TextField to another on NEXT key press.


-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if(textField == nameField) {
[districtField becomeFirstResponder];
}
else if(textField == districtField) {
[emailField becomeFirstResponder];
}
    else if(textField == emailField) {
[mobileField becomeFirstResponder];
}
    else if(textField == mobileField) {
[mobileField resignFirstResponder];
}
return YES;
}

Checking the TextField Values are Empty and Email Validation.


-(IBAction)SaveButton:(id)sender{

    
 NSString *msgStr = @"";
BOOL bErr = NO;
    NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
    
    if(imageView.image==[UIImage imageNamed:@"noimage.jpeg"]) {
msgStr = @"Choose an Image";
bErr = YES;
    }
    else if(nameField.text.length == 0) {
msgStr = @"Please provide your name";
bErr = YES;
[nameField becomeFirstResponder];
}
else if(districtField.text.length == 0) {
msgStr = @"Please provide your District";
bErr = YES;
[districtField becomeFirstResponder];
}else if(emailField.text.length == 0) {
msgStr = @"Please provide your email";
bErr = YES;
[emailField becomeFirstResponder];
}
    
    
    else if ([emailTest evaluateWithObject:emailField.text] == NO)
    {
        
        msgStr = @"Invalid Email Id! Please try again";
bErr = YES;
[emailField becomeFirstResponder];
    }
    
    
if(bErr) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:msgStr delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
//[alert release];
return;
}
}

Retrieving an Array stored by NSUserDefaults.


- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    currentDefaults = [NSUserDefaults standardUserDefaults];

 NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedName"];
    NSMutableArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    nameArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    NSLog(@"name-- %d",[nameArray count]);
    
    NSData *dataRepresentingSavedArray0 = [currentDefaults objectForKey:@"savedImage"];
    NSMutableArray *oldSavedArray0 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray0];
    imageArray = [[NSMutableArray alloc] initWithArray:oldSavedArray0];
    NSLog(@"image-- %d",[imageArray count]);


title1.text=[nameArray objectAtIndex:indexPath.row];

NSData *imgData = (NSData*)[imageArray objectAtIndex:indexPath.row];
    UIImage* imge = [[UIImage alloc] initWithData:imgData];
    imageView.image=imge;



}





Storing an Array using NSUserDefaults.




- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];


currentDefaults = [NSUserDefaults standardUserDefaults];

    NSData *dataRepresentingSavedArray0 = [currentDefaults objectForKey:@"savedImage"];
    NSMutableArray *oldSavedArray0 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray0];
    imageArray = [[NSMutableArray alloc] initWithArray:oldSavedArray0];
    NSLog(@"image-- %d",[imageArray count]);
    
    
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedName"];
    NSMutableArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    nameArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    NSLog(@"name-- %d",[nameArray count]);

NSData *imgData = (NSData*)[imageArray objectAtIndex:p];
        UIImage* imge = [[UIImage alloc] initWithData:imgData];
        imageView.image=imge;
        nameField.text=[nameArray objectAtIndex:p];
}

-(IBAction)SaveButton:(id)sender{

 NSData *ImageData1 = UIImageJPEGRepresentation(imageView.image, 0.9);

[imageArray addObject:ImageData1];
 [nameArray addObject:nameField.text];

 [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:imageArray] forKey:@"savedImage"];
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:nameArray] forKey:@"savedName"];

}




Printing Custom Data with Image.




-(void)print{
    
            if (![UIPrintInteractionController isPrintingAvailable]) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Printer Availability Error Title", @"")
                                                             message:NSLocalizedString(@"Printer Availability Error Message", @"")
                                                            delegate:nil
                                                   cancelButtonTitle:NSLocalizedString(@"OK", @"OK")
                                                   otherButtonTitles:nil];
        [alertView show];
        return;
    }
    
    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    
    if(!pic) {
        NSLog(@"Couldn't get shared UIPrintInteractionController!");
        return;
    }
    
    pic.delegate = self;
    
    UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    printInfo.outputType = UIPrintInfoOutputGeneral;
    printInfo.jobName = @"Sample";
    pic.printInfo = printInfo;
    
    NSString *htmlString = [self prepareHTMLText];
    UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:htmlString];
    htmlFormatter.startPage = 0;
    htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1-inch margins on all sides
    htmlFormatter.maximumContentWidth = 6 * 72.0;   // printed content should be 6-inches wide within those margins
    pic.printFormatter = htmlFormatter;
    
    pic.showsPageRange = YES;
    
    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
        
        if (!completed && error) {
            NSLog(@"Printing could not complete because of error: %@", error);
        }
    };
    
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        // [pic presentFromBarButtonItem:self.myPrintBarButton animated:YES completionHandler:completionHandler];
        
    } else {
        [pic presentAnimated:YES completionHandler:completionHandler];
    }

    
}
    
    
Add base64.h and .m files to project and import to ur viewcontroller to print an image.

- (NSString *)prepareHTMLText {
   
    NSMutableString *body = [NSMutableString stringWithString:@"<!DOCTYPE html><html><body>"];
    NSString *str1 = [Base64 encode:UIImagePNGRepresentation(imageView.image)];
    
    [body appendString:@"<h2>ID Card</h2>"];
    [body appendFormat:@"<img src=\"data:image/png;base64,%@\" alt=\"\" height=\"100\" width=\"100\"/>",str1];
    
    [body appendFormat:@"<p>%@ %@</p>", nameField.text, districtField.text];
   
    [body appendString:@"</body></html>"];
    return body;
}