0

I have a table view controller with text fields that save using core data. I also have a search display view controller and i link them together using push segue and use another push with Prepareforsegue to link to information back to the same table view controller. But my issue is that the information is not saving back to the original table view controller but is creating a new one each time i call the prepare for segue.


Here is the table view controller code -

 //

//  PersonDetailTVC.m

//  Staff Manager

//

//  Created by Tim Roadley on 14/02/12.

//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.

//



#import "PersonDetailTVC.h"

#import "PersonsTVC.h"

#import <LibXL/LibXL.h>



@implementation PersonDetailTVC{



    NSArray *recipes;

    NSArray *searchResults;

 UIImage *image;

    UIImage *imagetwo;

    UIImage *imagethree;

    UIImage *imagefour;

    UIImage *imagefive;

    UIImage *imagesix;

    UIImage *imageseven;

    UIImage *imageeight;

    UIImage *imagenine;

    UIImage *imageten;

}



@synthesize delegate;

@synthesize person = _person;



@synthesize selectedRole;



@synthesize recipeLabel;

@synthesize recipeName;

@synthesize LinkLabel;







@synthesize personroomTextField = _personroomTextField;

@synthesize personFirstnameTextField = _personFirstnameTextField;

@synthesize personaddressTextField = _personaddressTextField;



@synthesize personcityTextField = _personcityTextField;





@synthesize personstateTextField = _personstateTextField;

@synthesize personstateTextField1 = _personstateTextField1;



@synthesize personzipTextField = _personzipTextField;





@synthesize personinsuranceTextField = _personinsuranceTextField;



@synthesize personclaimTextField = _personclaimTextField;



@synthesize persontaxTextField = _persontaxTextField;



@synthesize personRoleTableViewCell = _personRoleTableViewCell;





@synthesize personquantityTextField = _personquantityTextField;





@synthesize personageTextField = _personageTextField;





@synthesize persondescTextField = _persondescTextField;



@synthesize personserialTextField = _personserialTextField;



@synthesize personpriceTextField = _personpriceTextField;



@synthesize personnotesTextField = _personnotesTextField;



@synthesize personrcvperTextField = _personrcvperTextField;



@synthesize persontotaldepTextField = _persontotaldepTextField;



@synthesize personacvTextField = _personacvTextField;



@synthesize personconditionTextField = _personconditionTextField;



@synthesize personstoredImage = _personstoredImage;



@synthesize personimgThumbNail = _personimgThumbNail;

- (void)viewDidLoad

{

    NSLog(@"Setting the value of fields in this static table to that of the passed Person");



    self.personFirstnameTextField.text = self.person.firstname;

    self.personaddressTextField.text = self.person.address;

    self.personcityTextField.text = self.person.city;

    self.personstateTextField.text = self.person.state;

    self.personzipTextField.text = self.person.zip;

    self.personinsuranceTextField.text = self.person.insurance;

    self.personclaimTextField.text = self.person.claim;

    self.persontaxTextField.text = self.person.tax;

    self.personquantityTextField.text = self.person.quantity;

    self.personRoleTableViewCell.textLabel.text = self.person.inRole.name;

    self.personRoleTableViewCelltwo.textLabel.text = self.person.inRole.name;

    self.personquantityTextField.text = self.person.quantity;

    self.personconditionTextField.text = self.person.condition;

    self.personageTextField.text = self.person.age;

    self.persondescTextField.text = self.person.desc;

    self.personserialTextField.text = self.person.serial;

    self.personnotesTextField.text = self.person.notes;

    self.personpriceTextField.text = self.person.price;

    self.personrcvperTextField.text = self.person.rcvper;

    self.personacvTextField.text = self.person.acv;

    self.persontotaldepTextField.text = self.person.totaldep;

    self.selectedRole = self.person.inRole; // ensure null role doesn't get saved.

    self.selectedRoletwo = self.person.inRole; // ensure null role doesn't get saved.



    self.personroomTextField.text = self.person.room;

    self.personroomTextField1.text = self.person.room1;

    self.personroomTextField2.text = self.person.room2;

    self.personroomTextField3.text = self.person.room3;

    self.personroomTextField4.text = self.person.room4;

    self.personroomTextField5.text = self.person.room5;

    self.personroomTextField6.text = self.person.room6;

    self.personroomTextField7.text = self.person.room7;

    self.personroomTextField8.text = self.person.room8;

    self.personroomTextField9.text = self.person.room9;

    self.personroomTextField10.text = self.person.room10;







    self.title = self.recipe.name;

    self.prepTimeLabel.text = self.recipe.prepTime;

    self.recipeNameLabel.text = self.recipe.name;

    self.LinkLabel.text = self.recipe.Link;



    self.prepTimeLabel1.text = self.recipe.prepTime1;

    self.recipeNameLabel1.text = self.recipe.name;

    self.LinkLabel1.text = self.recipe.Link1;



    self.persontotaldepTextField50.text = self.person.totaldep50;

    self.selectedRole = self.person.inRole; // ensure null role doesn't get saved.



     [self.tableView reloadData];

    UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];

    [tgr setCancelsTouchesInView:NO];

    [self.tableView addGestureRecognizer:tgr];











        [super viewDidLoad];







}





- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        PersonDetailTVC *destViewController = segue.destinationViewController;

        destViewController.person = [recipes objectAtIndex:indexPath.row];





    }

}







- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {



    if (indexPath.section == 0) {

        switch (indexPath.row) {

            case 0:

                [self.personFirstnameTextField becomeFirstResponder];

                break;

            case 1:

                [self.personaddressTextField becomeFirstResponder];

            case 2:

                [self.personcityTextField becomeFirstResponder];

            case 3:

                [self.personstateTextField becomeFirstResponder];

            case 4:

                [self.personzipTextField becomeFirstResponder];

            case 6:

                [self.personinsuranceTextField becomeFirstResponder];

            case 7:

                [self.personclaimTextField becomeFirstResponder];

            case 8:

                [self.persontaxTextField becomeFirstResponder];

            case 9:

                [self.personquantityTextField becomeFirstResponder];

            case 10:

                [self.personconditionTextField becomeFirstResponder];

            case 11:

                [self.personageTextField becomeFirstResponder];

            case 12:

                [self.persondescTextField becomeFirstResponder];

            case 13:

                [self.personserialTextField becomeFirstResponder];

            case 14:

                [self.personpriceTextField becomeFirstResponder];

            case 15:

                [self.personnotesTextField becomeFirstResponder];

            case 16:

                [self.personrcvperTextField becomeFirstResponder];

            case 17:

                [self.personacvTextField becomeFirstResponder];

            case 18:

                [self.persontotaldepTextField becomeFirstResponder];

            case 19:

                [self.personstoredImage becomeFirstResponder];





            default:

                break;

        }

    }

}



- (void)viewDidUnload

{

    //[self setPersonNameTextField:nil];

    [self setPersonFirstnameTextField:nil];

    [self setPersonaddressTextField:nil];

    [self setPersoncityTextField:nil];

    [self setPersonstateTextField:nil];

    [self setPersonzipTextField:nil];

    [self setPersoninsuranceTextField:nil];

    [self setPersonclaimTextField:nil];

    [self setPersontaxTextField:nil];

    [self setPersonquantityTextField:nil];

    [self setPersonRoleTableViewCell:nil];

    [self setPersonRoleTableViewCelltwo:nil];

    [self setPersonconditionTextField:nil];

    [self setPersonageTextField:nil];

    [self setPersonserialTextField:nil];

    [self setPersondescTextField:nil];

    [self setPersonpriceTextField:nil];

    [self setPersonnotesTextField:nil];

    [self setPersonrcvperTextField:nil];

    [self setPersontotaldepTextField:nil];

    [self setPersonacvTextField:nil];



    [super viewDidUnload];

    NSString *fullURL = @"http://conecode.com";

    NSURL *url = [NSURL URLWithString:fullURL];

    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [_viewWeb loadRequest:requestObj];

}



- (IBAction)save:(id)sender

{

    NSLog(@"Telling the PersonDetailTVC Delegate that Save was tapped on the PersonDetailTVC");



    self.person.firstname = self.personFirstnameTextField.text; // Set Firstname

    self.person.address = self.personaddressTextField.text; // Set Surname

    self.person.city = self.personcityTextField.text;

    self.person.state = self.personstateTextField.text;

    self.person.zip = self.personzipTextField.text;

    self.person.insurance = self.personinsuranceTextField.text;

    self.person.claim = self.personclaimTextField.text;

    self.person.tax = self.persontaxTextField.text;

    self.person.quantity = self.personquantityTextField.text;

    self.person.condition = self.personconditionTextField.text;

    self.person.age = self.personageTextField.text;

    self.person.desc = self.persondescTextField.text;

    self.person.serial = self.personserialTextField.text;

    self.person.price = self.personpriceTextField.text;

    self.person.notes = self.personnotesTextField.text;

    self.person.rcvper = self.personrcvperTextField.text;

    self.person.acv = self.personacvTextField.text;

    self.person.totaldep = self.persontotaldepTextField.text;





    [self.persontwo setInRole:self.selectedRole]; // Set Relationship!!!

    [self.persontwo.managedObjectContext save:nil];  // write to database

    [self.delegate personDetailTVCDidSave:self];

    [self.person setInRole:self.selectedRole]; // Set Relationship!!!

    [self.person setInRole:self.selectedRoletwo];

    [self.person.managedObjectContext save:nil];  // write to database

    [self.delegate personDetailTVCDidSave:self];

}







- (void)dismissKeyboard {

    [self.view endEditing:TRUE];

}



- (void)roleWasSelectedOnPersonRoleTVC:(PersonRoleTVC *)controller

{

    self.personRoleTableViewCell.textLabel.text = controller.selectedRole.name;

    self.selectedRole = controller.selectedRole;

    NSLog(@"PersonDetailTVC reports that the %@ role was selected on the PersonRoleTVC", controller.selectedRole.name);

    [self.person setInRole:self.selectedRole];

    [self.person.managedObjectContext save:nil];

    [delegate personDetailTVCDidSave:self];

    [controller.navigationController popViewControllerAnimated:YES];



    self.personRoleTableViewCelltwo.textLabel.text = controller.selectedRole.name;

    self.selectedRoletwo = controller.selectedRole;

    NSLog(@"PersonDetailTVC reports that the %@ role was selected on the PersonRoleTVC", controller.selectedRole.name);

    [self.person setInRole:self.selectedRoletwo];

    [self.person.managedObjectContext save:nil];

    [delegate personDetailTVCDidSave:self];

    [controller.navigationController popViewControllerAnimated:YES];

}



- (void)personChangedOnMaster:(PersonsTVC *)controller {



    self.person = controller.selectedPerson;

    NSLog(@"PersonDetailTVC.m: personChangedOnMaster: %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@",self.person.firstname, self.person.address, self.person.city, self.person.state, self.person.zip, self.person.insurance, self.person.claim, self.person.tax, self.person.quantity, self.person.condition, self.person.age, self.person.desc, self.person.serial, self.person.price, self.person.notes, self.person.rcvper, self.person.totaldep,



          self.person.serial1, self.person.price1, self.person.notes1, self.person.rcvper1, self.person.totaldep1,



          self.person.serial2, self.person.price2, self.person.notes2, self.person.rcvper2, self.person.totaldep2,



          self.person.serial3, self.person.price3, self.person.notes3, self.person.rcvper3, self.person.totaldep3,



          self.person.serial4, self.person.price4, self.person.notes4, self.person.rcvper4, self.person.totaldep4,



          self.person.serial5, self.person.price5, self.person.notes5, self.person.rcvper5, self.person.totaldep5,



          self.person.serial6, self.person.price6, self.person.notes6, self.person.rcvper6, self.person.totaldep6,



          self.person.serial7, self.person.price7, self.person.notes7, self.person.rcvper7, self.person.totaldep7,



          self.person.serial8, self.person.price8, self.person.notes8, self.person.rcvper8, self.person.totaldep8,



          self.person.serial9, self.person.price9, self.person.notes9, self.person.rcvper9, self.person.totaldep9,



          self.person.serial10, self.person.price10, self.person.notes10, self.person.rcvper10, self.person.totaldep10,







          self.person.room,

          self.person.room1,

          self.person.room2,

          self.person.room3,

          self.person.room4,

          self.person.room5,

          self.person.room6,

          self.person.room7,

          self.person.room8,

          self.person.room9,

          self.person.room10,



          self.person.acv, self.person.storedImage);

    [self.navigationController popViewControllerAnimated:YES]; // Return detail view to root.

    [self viewDidLoad];



    self.persontwo = controller.selectedPerson;



    NSLog(@"PersonDetailTVC.m: personChangedOnMaster: %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ ",self.person.firstname, self.person.address, self.person.city, self.person.state, self.person.zip, self.person.insurance, self.person.claim, self.person.tax, self.person.quantity, self.person.condition, self.person.age, self.person.desc, self.person.serial, self.person.price, self.person.notes, self.person.rcvper, self.person.totaldep, self.person.acv, self.person.storedImage);

    [self.navigationController popViewControllerAnimated:YES]; // Return detail view to root.

    [self viewDidLoad];





}



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {

        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

    } else {

        return YES;

    }

}





@end

Here is the search display controller code -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {
        NSIndexPath *indexPath = nil;
        Recipe *recipe = nil;
        if (self.searchDisplayController.active) {
            indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
            recipe = [searchResults objectAtIndex:indexPath.row];
        } else {
            indexPath = [self.tableView indexPathForSelectedRow];
            recipe = [recipes objectAtIndex:indexPath.row];
        }


PersonDetailTVC *destViewController = segue.destinationViewController;
        destViewController.recipe = recipe;

        [self dismissViewControllerAnimated:YES completion:nil];
    }
}
Sport
  • 6,972
  • 6
  • 38
  • 61
matt suff
  • 27
  • 1
  • 5
  • That's because you never go backwards with a segue unless you use an unwind segue. All other segues always instantiate new controllers. – rdelmar Dec 31 '14 at 06:09
  • I tried to use an unwind segue but i dont understand how it works and how to implement it,. – matt suff Dec 31 '14 at 06:10
  • Then you should learn how to do it correctly, not use a method that's wrong. See this answer, http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-do-you-use-them – rdelmar Dec 31 '14 at 06:11

1 Answers1

0

No need to pass data through the segue because when segue performs it always create new instance. Add this in PersonDetailTVC.h

   - (IBAction)backFromMapView:(UIStoryboardSegue *)segue
{
    NSLog(@"and we are back");
    PersonDetailTVC* person = (PersonDetailTVC *)segue.sourceViewController;
    NSLog(@"location %@", person.recipe);
}

Helps you to how unwind segue performs. this link is helpful how to the above more clearly:

IBOutlet does not display its value in UI

Community
  • 1
  • 1
Daljeet
  • 1,454
  • 2
  • 16
  • 38