2012-04-03 9 views
0

初心者を助けてくれてありがとう。私は、WebService.mで設定文字列を設定するために、SecondViewController.xibのテキストフィールドの値を使用しようとしています。私は自分のコードを含めました。私がアプリケーションを実行すると、WebServiceからの私のNSLogは私に "Test IP is:(null)"の出力を与えます。SecondViewController.mのNSLogはText Fieldの値です。 strIPをWebService.mに正しく渡すにはどうすればよいですか?サンプルコードを使用すると非常に便利です。ビュー間のテキストフィールドの値を渡す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); 

答えて

1

あなたはブロック内の値を変更したい場合は、あなたが必要とします変数タイプ(sharedIP)に__block型指定子を使用すると、ブロック内の変更がvalに影響しますブロックの外側にある。

また、+ sharedIPを呼び出すたびに、staticの値をnilに設定して初めて初めてリセットします。あなたのデザインはちょっと変わっているようです...私は、なぜView Controllerの静的インスタンスが必要なのか分かりませんが、あなたが何をしているのか分かりません。永続的なデータだけを必要とする場合は、NSUserDefaultsを参照してください(これは再起動後も持続するのですばらしいです)。文字列の値を保持するために、データコンテナの静的インスタンスを作成する方が良いかもしれません。

幸運。

+0

に役立つかもしれません! NSUserDefaultsがチケットです。本当にありがとう! – iDev

0
  1. TextFieldの代理人がSecondViewControllerであることを確認してください。
  2. 返却前に同じ値を印刷してください。例えば(SecondViewController *)sharedIP { static SecondViewController * sharedIP = nil; static dispatch_once_t onceToken;

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

    }

私はこのような何かのためにどこでも探していた

乾杯

関連する問題