Werte/Variablen übertragen um gepushten ViewController zu verändern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Werte/Variablen übertragen um gepushten ViewController zu verändern

    Hallo OS X Entwicklerforum- Community

    Es geht mir wieder um eine Frage bezüglich tableViews. Ich suche nach einer Möglichkeit und einer Entscheidungshilfe (falls meine suggestions überhaupt stimmen), wie ich Werte/Variablen von einem ViewController in einen anderen transportieren kann, angepasst an ein case, dessen Grundlage zwangsweise ein tableView ist auf dem ersten ViewController ist, welches unbedingt dynamisch erstellt werdend bleiben muss, also auf das ich später wenn server hinzukommen nicht die tabelle ändern muss sondern nur die datasource die auf einem außenstehenden Server liegt.


    Im Hintergrund läuft natürlich ein NavigationController mit welcher mir eine sehr einfache Möglichkeit gönnt, aus dem selecten der verschiedenen Zellen direkt zum 2. ViewController gepusht zu werden, auch wenn ich wegen der Einfachkeit in der Annahme stehe, dass es falsch sein könnte und sich später nicht weiter eignet.
    Da die Zellen ja geklont werden pusht also auch jede angewählte zu dem einen sich später gezwungenermaßen anpassenden ViewController,

    Mein Ersuch bezieht sich jetzt jediglich auf Methoden, Daten die ich einem jeweiligen Zellenklon zuspreche auch auf den 2. viewController zu übertragen.

    Jede dieser Zellen wird schließlich je nach Informationen aus der Datasource geschaffen und bearbeitet, das heißt jede Zelle hat ihren eigenen Namen, Adresse (Internetadresse..), Information ob Online oder Offline, wie kann ich also diese Informationen verwenden und je nachdem WAS ich angeklickt habe halt auch den 2. ViewController verändern. (Der soll später in Sachen CorePlot verändert werden)

    Hat jemand eine Idee? Braucht ihr mehr Informationen?
  • Quellcode

    1. #import "XYZViewController.h"
    2. @interface coreGraphicViewController : XYZViewController
    3. ___________________________________________
    4. @interface coreGraphicViewController ()
    5. @end
    6. @class XYZViewController;
    7. @implementation coreGraphicViewController
    8. @synthesize testString;
    9. ________________________________________
    10. @interface XYZViewController : UIViewController <NSURLConnectionDataDelegate, UITableViewDelegate, UITableViewDataSource>
    11. {
    12. NSMutableArray *jsonArray;
    13. NSData *myData;
    14. NSString *testString;
    15. }
    16. @property (strong, nonatomic) NSMutableArray* jsonArray;
    17. @property (strong, nonatomic) NSData* myData;
    18. @property (weak, nonatomic) IBOutlet UITableView *tableViewpro;
    19. @property (strong, nonatomic) NSString *testString;
    20. ________________________________________
    21. @interface XYZViewController ()
    22. @end
    23. @implementation XYZViewController
    24. @synthesize jsonArray;
    25. @synthesize myData;
    26. @synthesize tableViewpro;
    27. @dynamic testString;
    Alles anzeigen

    Es geht zum test erstmal um testString
    Ich glaube ich geh da vollkommen falsch ran oder?
  • Quellcode

    1. XYZViewController.m
    2. -(void) tableView: (UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *) indexpPath
    3. {
    4. NSLog(@"johoho");
    5. NSLog(@"geklickt auf %@",[self.jsonArray objectAtIndex:indexpPath.row]);
    6. int userAge = 22;
    7. NSDictionary *testDictionary = [self.jsonArray objectAtIndex:indexpPath.row];
    8. NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    9. NSUserDefaults *serverPush = [NSUserDefaults standardUserDefaults];
    10. if(serverPush)
    11. {
    12. [serverPush setObject:[NSDictionary dictionaryWithDictionary:testDictionary] forKey:@"server"];
    13. [serverPush synchronize];
    14. }
    15. if(standardUserDefaults) {
    16. [standardUserDefaults setObject:[NSNumber numberWithInt:userAge] forKey:@"age"];
    17. [standardUserDefaults synchronize];
    18. }
    19. }
    20. coreGraphicViewController.m
    21. - (void)viewDidLoad
    22. {
    23. //int userAge = 0;
    24. NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    25. NSUserDefaults *serverPush = [NSUserDefaults standardUserDefaults];
    26. NSDictionary *testDic = nil;
    27. if(serverPush)
    28. {
    29. testDic = [serverPush objectForKey:@"server"];
    30. }
    31. NSNumber *age = nil;
    32. NSLog(@"Es heißt und wurde übertragen: %@",testDic);
    33. if(standardUserDefaults)
    34. {
    35. age = [standardUserDefaults objectForKey:@"age"];
    36. }
    37. userAge = [age intValue];
    38. self.testLabel.text = [NSString stringWithFormat:@"%i",userAge];
    39. [super viewDidLoad];
    Alles anzeigen



    So habe ichs jez erstmal gelöst..es geht auch tatsächlich, jedoch kommt immer erst beim 2. mal was in der liste auswählen der wert vom ersten klicken an..
  • Ôo jetz hast du über einen der umständlichsten Wege gelöst.


    coreGraphicViewController ist dein DetailViewController?


    Quellcode

    1. //coreGraphicViewController.h
    2. ... ..
    3. @property (nonatomic, retain) UILabel * testLabel;
    4. @property (nonatomic, retain) NSString * testString;
    5. // coreGraphicViewController.m
    6. @implementation coreGraphicViewController
    7. @synthesize testLabel = _testLabel;
    8. @synthesize testString = _testString;
    9. - (void)viewDidAppear:(BOOL)animated
    10. {
    11. [super viewDidAppear:animated];
    12. self.testLabel.text = self.testString;
    13. }
    Alles anzeigen

    Dann ein deinem XYZViewController.m

    Quellcode

    1. -(void) tableView: (UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *) indexpPath
    2. {
    3. // ich weiß nicht wo du deinen Controller anlegst ...
    4. coreGraphicViewController * controller = [[coreGraphicViewController alloc] init];
    5. // hier übergibst du deinem controller den string
    6. controller.testString = [self.jsonArray objectAtIndex:indexpPath.row];
    7. // dann zeigst du ihn an, weiß ich nicht wie du es willst, davon sehe ich nirgends etwas
    8. [self.navigationController pushViewController:controller animated:YES];
    9. }
    Alles anzeigen


    Also ganz einfach nur einen Wert übergeben über Properties.
  • Nein ich arbeite mit Storyboard wie es mir vom V2B empfohlen wurde.
    komsicherweise steht trotzdem ein

    Quellcode

    1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    2. {
    3. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    4. if (self) {
    5. // Custom initialization
    6. }
    7. return self;
    8. }


    in meinem quellcode in der coreGraphicViewController.m
  • achso, das erwähnst du grade zum ersten mal ... :)

    Dann wohl eher so.

    Quellcode

    1. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. coreGraphicViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"coreGraphicViewController"];
    4. [self.navigationController pushViewController:detail animated:YES];
    5. }


    Du musst dem coreGraphicViewController im Storyboard noch einen Identifier zuweisen.