0

私は2つのView Controllerを持っています:

Index Second In Index 2 つのテキストフィールドとボタンがあります。

このテキスト フィールドに入力し、「次へ」ボタンを押して 2 番目のビューに移動します。配列を使用して、この 2 つのテキスト フィールドを「表示」する必要があります (後で JSON データを送信します)。

私はこれを試しました: クラス Second の @property を textArray として宣言します。次に、Index から Second にプッシュするときに、このプロパティを設定する必要があります。

Second.h ファイルでは、

@property(nonatomic, strong) NSArray *textArray;

Index.m ファイルでは、

Second *aSecond = [[Second alloc] init];
aSecond.textArray = @[textField1.text, textField2.text];

// Index から Second にプッシュするコードを記述 クラス Second で、aSecond.textArray[0] および aSecond.textArray[1] として使用できます。

しかし、ページを切り替える (次をクリック) と、配列は null になります。

スイッチページの場合、これを使用します:

SecondPage *SecondPage = [self.storyboard instantiateInitialViewController];
    SecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];
    [self SecondPage animated:YES];

どうすれば最もよく理解できますか?助けてください!よろしくイヴァン。

4

6 に答える 6

3

2番目のView Controllerのような独自の指定イニシャライザを作成します。

-(id)initWithTextArray:(NSArray *)_textarray;

次に、2番目のView Controllerを初期化します

Second *aSecond = [[Second alloc] initWithTextArray:array];

2 番目のビュー コントローラーの viewDidLoad メソッドで、textarray を使用してビューにデータを入力します。

于 2013-01-15T08:39:29.837 に答える
2

ストーリーボード経由で使用している場合は、このようにする必要があります。

SecondPage *aSecondPage = [self.storyboard instantiateInitialViewController];
aSecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];
aSecond.textArray = @[textField1.text, textField2.text];
[self aSecondPage animated:YES];

これを実行してaSecond = [[Second alloc] init];から を実行aSecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];すると、同じインスタンスではなく別のインスタンスが作成されます。この配列を最初のインスタンスに設定し、2 番目のインスタンスに設定することを期待していました。

于 2013-01-15T08:37:06.700 に答える
0

「デリゲート メソッドを使用したグローバル変数と配列」を試してみましたか。外すまでは解放されません。アプリケーションインスタンスまでグローバルになります。

デリゲートクラスでは、

.h ファイル

NSMutableArray *obj;

.m ファイル、

Synthesize & Alloc - init array.

それで、

ViewContoller .m ファイル内

AppDelegate *app;
app = (AppDelegate *)[[UIApplication sharedApplication] delegate];

それから、

[app.obj addObject: text1.text];

2 番目の .m ファイルでは、それを使用できます。

NSLog(@" Data : %@", app.obj);

この配列が必要なときはいつでも、「デリゲート」クラスの「アプリ」オブジェクトを初期化する必要があることに注意してください。

それは動作し、データをグローバルに保存します。

ありがとう。

于 2013-01-15T09:10:11.523 に答える
0

私は2つの方法を考えることができます:

1) Second にメソッドを追加し、初期化後にそれを呼び出して、値を引数としてメソッドに渡します。したがって、Second.m-(void) push :(NSArray *)array{}では、NSArray 名の前に「&」を付けて渡します。

2) First で getter を作成します。NS であるため、割り当てを使用する必要があるため、First.h に 入れ ます @property(nonatomic, assign) NSArray *array1;@synthesize array1;self.array1 = [@"t", @"e", @"s", @"t"];NSArray *array1 = first.array1;

独自のゲッターを作成できますが、合理的ではありません。

于 2013-01-15T15:36:27.507 に答える
-2
SecondPage *SecondPage = [self.storyboard instantiateInitialViewController];
    SecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];
    [self SecondPage animated:YES];

1)変数名とクラス名が同じです。2)XCodeが[self SecondPageアニメーション:YES]を書いたことを受け入れたかどうかはわかりません。

最後に、アレイを割り当てましたか?

編集;

ああ、:

aSecond.textArray = @[textField1.text, textField2.text];

あなたは書くべきです:

[aSecond.textArray addObject:textField1.text]; // using NSMutableArray
于 2013-01-15T08:32:17.940 に答える
-3

あるコントローラーから別のコントローラーに値を転送する方法はたくさんありますが、これはこれまでで最も簡単だと思います。使用するNSUserDefaults

最初の簡単な方法

最初のコントローラーで

[[NSUserDefaults standardUserDefaults] setObject:@[textField1.text, textField2.text] forKey:@"listOfData"];

2番目のコントローラーで

NSArray *array = [[NSUserDefaults standardUserDefaults]objectForKey:@"listOfData"];

2番目の簡単な方法は

DetailVC *detailVC = [self.storyboard instantiateInitialViewController];
detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailVC"];
detailVC.textArray = @[textField1.text, textField2.text]; 
于 2013-01-15T08:45:10.900 に答える