0

UITextField値を1つのビューから他のビュー(2nd、3rd ... views)に渡す必要があります。実際には、3番目のViewControllerにscrollViewがあり、それに値を表示する必要があります。しかし、UITextField値が渡されません。 nullを返しています。何が間違っているのかわかりませんか?これは私が使用しているコードです:

In ViewController1.m:

-(IBAction)butonclick:(id)sender{
ViewController2 *view2=[ViewController2 alloc];
view2.id=name.text; 
ViewController3 *view3=[ViewController3 alloc];
view3.id=name.text; 
[view2 release];
[view3 release];
}


IN ViewConroller2.h :
@interface ViewController2 : UIViewController { 
   NSString *id;
   UIlabel *displayId;
}

In ViewController2.m :
- (void)viewDidLoad
{
 self.displayId.text=self.id;
}

In ViewController3.h:
@interface ViewController2 : UIViewController { 
  NSString *id;
  UIlabel *dispId;
 }  

In ViewController3.m :
- (void)viewDidLoad
{
self.dispId.text=self.id;
}

しかし、ここではid値はViewController3に渡されません。nullを返します。どこが間違っているのでしょうか。

4

3 に答える 3

0

これで文字列をグローバルに宣言するAppDelegate.hと、ファイル全体で文字列の値を一定に保つのに役立ちます。また、文字列を追加したり、値を変更したり、割り当てたりする場合は、インポートしAppDelegate.hます。

これらのリンクも確認してください:-

あるクラスから別のクラスにNSStringを渡す

NSStringをあるクラスから別のクラスに渡す

于 2012-10-13T11:11:35.063 に答える
0

初期化せずに値を渡します。

ViewController2 *view2=[[ViewController2 alloc]init];
view2.id=name.text; 
ViewController3 *view3=[[ViewController3 alloc]init];
view3.id=name.text; 

アプリ内でオブジェクトをグローバルに使用する場合は、appDelegateで宣言できます。

AppDelegate.hで

 @interface AppDelegate : NSObject <NSApplicationDelegate>
    {
         NSString *idGlobal;
    }
    @property (nonatomic, retain) NSString *idGlobal;

AppDelegate.m

@synthesize idGlobal;

In ViewController1.m:

-(IBAction)butonclick:(id)sender{

     appDelegate.idGlobal=name.text; 
}

In ViewController2.m: and
In ViewController3.m:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
id=appDelegate.idGlobal;
于 2012-10-13T11:41:25.270 に答える
0

私はあなたが書いたコードを修正しているだけですが、AppDelegateプロパティを使用するための上記の提案は良いものです。コードの主な問題は、NSStringオブジェクトをプロパティにするのではなく、宣言しているだけであるということです。これをチェックして:

-(IBAction)butonclick:(id)sender{
ViewController2 *view2=[ViewController2 alloc]init];
view2.str=name.text; 
ViewController3 *view3=[ViewController3 alloc]init;
view3.str=name.text; 
[view2 release];
[view3 release];
}


IN ViewConroller2.h :
@interface ViewController2 : UIViewController { 
   NSString *str;
   UIlabel *displayId;
}
@property(nonatomic, retain) NSString* str; //Synthesize it in .m file

In ViewController2.m :
- (void)viewDidLoad
{
 self.displayId.text=self.str;
}

In ViewController3.h:
@interface ViewController2 : UIViewController { 
  NSString *str;
  UIlabel *dispId;
 }  
    @property(nonatomic, retain) NSString* str; //Synthesize it in .m file

In ViewController3.m :
- (void)viewDidLoad
{
self.dispId.text=self.str;
}

私はあなたのシナリオを知りませんが、そのような状況を実装する最も効果的な方法はデリゲートを使用することです。文字列が設定されているクラス(ViewController1)のデリゲートを作成し、それに応じて他のViewControllerでデリゲートを設定します。

于 2012-10-15T14:20:27.173 に答える