2012-04-03 15 views
0

danke für die Hilfe eines Neulings. Ich versuche, den Wert eines Textfelds in SecondViewController.xib zu verwenden, um eine Einstellungszeichenfolge in WebService.m einzurichten. Ich habe meinen Code aufgenommen. Wenn ich die Anwendung ausfühle, gibt mein NSLog von WebService mir eine Ausgabe von "Die Test-IP ist: (null)" Der NSLog von SecondViewController.m ist der Wert des Textfelds. Wie übergibt du die strIP an WebService.m korrekt? Die Verwendung des Beispielcodes wäre sehr hilfreich.Wert des Textfelds zwischen Ansichten übergeben iphone

SecondViewController.h:

@interface SecondViewController : UIViewController 

{ 
UITextField *ipAdd; 

NSString *strIP; 

} 
@property (nontoxic, retain) IBOutlet UITextField *ipAdd; 

@property (nonatomic, retain) NSString *strIP; 


-(IBAction)textchanged:(id)sender; 

+(SecondViewController*)sharedIP; 

SecondViewController.m:

-(IBAction)textchanged:(id)sender 
{ 

strIP = ipAdd.text; 
NSLog(@"the string in the text field is: %@", strIP); 

} 

+(SecondViewController*)sharedIP 
{ 
static SecondViewController *sharedIP = nil; 
static dispatch_once_t onceToken; 

dispatch_once(&onceToken, ^{ 
    sharedIP = [[SecondViewController alloc] init]; 
     }); 
return sharedIP; 
} 

WebService.m:

SecondViewController *IP = [SecondViewController sharedIP] ; 
NSLog(@"The test IP is: %@", IP.strIP); 

Antwort

1

Wenn Sie einen Wert in einem Block ändern möchten, müssen Sie Verwenden Sie den Typspezifizierer __block für den Variablentyp (sharedIP), sodass Änderungen im Block das val beeinflussen Außerhalb des Blocks.

Außerdem: Jedes Mal, wenn Sie + sharedIP aufrufen, setzen Sie den Wert der statischen auf Null und nur das erste Mal zurückgesetzt. Ihr Design scheint ein bisschen seltsam ... Ich bin mir nicht sicher, warum Sie jemals eine statische Instanz eines View-Controllers wünschen würden, aber ich weiß nicht, wonach Sie suchen. Wenn Sie nur persistente Daten wünschen, lesen Sie NSUserDefaults (was cool ist, weil es über Neustarts hinaus besteht). Es ist möglicherweise besser, eine statische Instanz eines Datencontainers zu erstellen, um den Zeichenfolgenwert beizubehalten.

Viel Glück.

+0

Ich habe überall für so etwas suchen! Das NSUserDefaults ist das Ticket. Vielen Dank! – iDev

0
  1. Überprüfen Sie Delegat Ihres TextField, das Ihr SecondViewController sein sollte.
  2. Versuchen Sie, den gleichen Wert auszudrucken, bevor Sie zurückkehren. z.B. :

    + (SecondViewController *) sharedIP { statischer SecondViewController * sharedIP = nil; statisch dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{ 
    sharedIP = [[SecondViewController alloc] init]; 
    }); 
    
    **NSLog(@"The test IP is: %@", sharedIP.strIP);** 
    
    return sharedIP; 
    

    }

helfen könnten

Prost