• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Problem mit Segue

Myrtel

Golden Delicious
Registriert
31.10.14
Beiträge
7
Hallo,

erstmal vorweg - ich bin (noch) ein ziemlicher Anfänger auf dem Gebiet App-Programmierung.

Es geht um folgendes.
Ich habe zwei ViewController und über einen Push-Segle soll vom einen zum anderen gewechselt werden und dabei gibt es ein Problem.

Ich habe programmiert:

Code:
#import "PersonalDetailViewController.h"
#import "Person.h"
#import "FirstNameEditViewController.h"
@interfacePersonalDetailViewController ()
@property (strong, nonatomic) IBOutletUIButton *buttonFirstName;
@end
@implementation PersonalDetailViewController
{
    Person *person;
    FirstNameEditViewController *editController;
}
- (IBAction)buttonFirstNameTouched:(id)sender {
    // Den Segue aufrufen
    [selfperformSegueWithIdentifier:mad:"firstNameEditSegue"sender:self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    // Diese Methode wird automatisch bei Ausführung eines Segue aufgerufen
    NSLog(@"SegueController: %@", segue.identifier);
    if ([segue.identifierisEqualToString:mad:"firstNameEditSegue"]){
        NSLog(@"komme ich hier noch rein? ");
        editController = segue.destinationViewController;
        editController.firstName = person.firstName;
        NSLog(@"Person First Name %@", person.firstName);
        NSLog(@"EditController %@", editController.firstName);
    }
}
und:
#import "FirstNameEditViewController.h"
@interfaceFirstNameEditViewController ()
@property (strong, nonatomic) IBOutletUITextField *textFieldFirstName;
@end
@implementation FirstNameEditViewController
-(void)viewWillAppear:(BOOL)animated {
    NSLog(@"Test2 %@", self.firstName);
    [super viewWillAppear:animated];
 
    if(self.firstName){
        NSLog(@"Test2 %@", self.textFieldFirstName.text);
        self.textFieldFirstName.text = self.firstName;
        NSLog(@"Test3");
    }
}
in FirstNameEditViewController.h gibt es noch:
[USER=89585]@interface[/USER] FirstNameEditViewController : UIViewController
@property (strong, nonatomic) NSString *firstName;
@end
Soweit so gut. Nun kommt folgende Fehlermeldung:
2014-10-31 10:41:30.091 PersonalStoryboard[2342:77957] SegueController: firstNameEditSegue
2014-10-31 10:41:30.092 PersonalStoryboard[2342:77957] komme ich hier noch rein?
2014-10-31 10:41:30.092 PersonalStoryboard[2342:77957] Person First Name Max
2014-10-31 10:41:30.092 PersonalStoryboard[2342:77957] EditController Max
2014-10-31 10:41:30.105 PersonalStoryboard[2342:77957] Test2 <UITextField: 0x7f852348c820; frame = (16 131; 288 30); text = ''; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7f852348b8a0>>
2014-10-31 10:41:30.105 PersonalStoryboard[2342:77957] Test2
2014-10-31 10:41:30.105 PersonalStoryboard[2342:77957] -[UITextField rangeOfCharacterFromSet:]: unrecognized selector sent to instance 0x7f852348c820

Für mich sieht das so aus, als wäre in self.firstName nicht der Text Inhalt von editController gelandet und er kann keinen leeren Text in ein UITextField schreiben. Ist das korrekt?
Wie bringe ich die App zum Laufen?

Vielen Dank :)
 
Zuletzt bearbeitet von einem Moderator:

frostdiver

Zwiebelapfel
Registriert
19.06.12
Beiträge
1.285
Die NSLogs mit Test2 zu "benennen" ist gerade etwas unglücklich. Die erste Test2 Ausgabe gibt ein UITextField anstatt eines Strings zurück. Kann ja nach deinem Code eigentlich nicht sein, würde aber die UITextField-Fehlermeldung erklären.

Noch was. Poste deinen Code in Zukunft in Code-Tags (Im Apfeltalk-Editor "Einfügen" neben der Diskette). Habe so viele traurige Gesichter im Code.
 

Myrtel

Golden Delicious
Registriert
31.10.14
Beiträge
7
Hey,
danke schon mal! Ja - war wohl etwas unglücklich beide mit Test2 zu bezeichnen ;D

Werde den Code nochmal gscheid posten ;)

Code:
#import "PersonalDetailViewController.h"
#import "Person.h"
#import "FirstNameEditViewController.h"

@interfacePersonalDetailViewController ()
@property (strong, nonatomic) IBOutletUIButton *buttonFirstName;
@end
@implementation PersonalDetailViewController
{
Person *person;
FirstNameEditViewController *editController;
}

- (IBAction)buttonFirstNameTouched:(id)sender {
// Den Segue aufrufen
[selfperformSegueWithIdentifier:mad:"firstNameEditSegue"sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
// Diese Methode wird automatisch bei Ausführung eines Segue aufgerufen
NSLog(@"SegueController: %@", segue.identifier);

if ([segue.identifierisEqualToString:mad:"firstNameEditSegue"]){
NSLog(@"komme ich hier noch rein? ");
editController = segue.destinationViewController;
editController.firstName = person.firstName;
NSLog(@"Person First Name %@", person.firstName);
NSLog(@"EditController %@", editController.firstName);
}
}
[/Code[

und:
[Code]
#import "FirstNameEditViewController.h"

@interfaceFirstNameEditViewController ()
@property (strong, nonatomic) IBOutletUITextField *textFieldFirstName;
@end
@implementation FirstNameEditViewController

-(void)viewWillAppear:(BOOL)animated {

NSLog(@"Test2 %@", self.firstName);
[super viewWillAppear:animated];

if(self.firstName){
NSLog(@"Test2 %@", self.textFieldFirstName.text);
self.textFieldFirstName.text = self.firstName;
NSLog(@"Test3");
}
}
 

frostdiver

Zwiebelapfel
Registriert
19.06.12
Beiträge
1.285
Ich sehe keinen Fehler im Code. Der muss an anderer Stelle sein oder ich sehe es einfach nicht.
Setze doch mal einen Breakpoint bei der ersten Test2 Ausgabe und gucke, was du da für ein Objekt in firstName hast. Wie gesagt, sieht ja nach nem UITextField aus.
Auch wenn ich mir nicht vorstellen kann, wie man die Property firstName überschreiben könnte, ohne dass sich Xcode beschwert.
 

Myrtel

Golden Delicious
Registriert
31.10.14
Beiträge
7
Also firstName wurde tatsächlich zu einem UITextField - weiß aber nicht, warum?
Wie kann ich das rausfinden?
 

frostdiver

Zwiebelapfel
Registriert
19.06.12
Beiträge
1.285
Und Xcode gibt keine Warnungen aus?
Hast du irgendwo eine Zuweisung mit Klammern, wie:
Code:
firstName = (NSString*)irgendWas;
Ansonsten irgendwelche Sachen mit firstName im Storyboard? Auch wenn ich nicht genau weiß, wie man das hinbekäme.
 

Myrtel

Golden Delicious
Registriert
31.10.14
Beiträge
7
Nein, keine Warnung bei Xcode.
So einen Code habe ich nirgends, nein.

Aber im Storyboard ist in der Tat etwas mit firstName.
Ich habe jetzt das firstName von FirstNameEditViewController.h &.m in firstName2 geändert. Ebenso beim Aufruf in der Methode prepareForSegue.
Jetzt bekomme ich allerdings folgende Fehlermeldung:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<FirstNameEditViewController 0x7fc7fb4ae370> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key firstName.'

Dabei komme ich gar nicht mehr in die Methode viewWillAppear von FirstNameEditViewController.m
Eine Idee was jetzt los ist?

Danke schon mal :)
 

frostdiver

Zwiebelapfel
Registriert
19.06.12
Beiträge
1.285
Jo. Er versucht firstName zu setzen und firstName ist nicht mehr da.
 

Myrtel

Golden Delicious
Registriert
31.10.14
Beiträge
7
Sorry - bin ja noch ein Neuling.
Wie kann ich denn das umgehen? Es muss doch möglich sein, den Namen von firstName auf firstName2 zu setzen ohne dabei die Funktionalität zu beeinflussen (vorausgesetzt man ändert sämtliche firstName zu firstName2), oder?
 

Myrtel

Golden Delicious
Registriert
31.10.14
Beiträge
7
Hab nochmal neuprogrammiert und jetzt funktioniert es. kA was ich vorher falsch gemacht habe :D