0

ビューコントローラページ(たとえば、ビューコントローラ1)にピッカービューがあります。次に、別のビューコントローラ(たとえば、ビューコントローラ2)のそのピッカービューから選択した文字列値にアクセスする必要があります。

これは、4つのグループに対応する保存データを表示するテーブルビューがあるためです。つまり、私のアプリケーションは、ユーザーがリマインダーを保存するリマインダーアプリケーションであり、ビューリマインダーページに表示されます。リマインダーは、ユーザーによってそれぞれのグループに保存されます。友人、家族、オフィスなど...だから私は以前に悪いプログラミングコンテキストで取得しました、すなわち

4つのグループに対応するリマインダーを表示するために4つのViewControllerを使用しました。つまり、クエリを使用して友人に対応するリマインダーを表示するためにfriendsViewControllerを使用しました。

NSString *getQuery = [NSString stringWithFormat:@"SELECT * FROM reminders WHERE Grp = 'Friends' GROUP BY Name,Event,Date"];

グループの家族、オフィス、知人の場合と同様に、悪いプログラミングのコンテキストを良いプログラミングの習慣に移すために、クエリを使用することを考えました。

NSString *getQuery = [NSString stringWithFormat:@"SELECT * FROM reminders WHERE Grp = '%@' GROUP BY Name,Event,Date",**selected string value from the picker in previous view**];

私が行おうとしている変更を特定してください。つまり、Grp ='%@'-文字列は、前のビューにあるピッカービューの行コンポーネントから選択された値です。

アクセスするための2つの可能な方法を知っています。

1.subclassing the view controller i.e. 

@interface viewController2:viewController1,but I already have subclassed i.e.:

@interface viewController2:addReminderController ,so I cant subclass twice,I am not aware too!

2. Creating an instance object of the viewController1 i.e. 

viewController1 *vC1 and I tried to access the groupPicker like [vC1.groupPicker selectedRowInComponent:row],

しかし、予想できるように、エラーがスローされます。つまり、行が宣言されていません。

groupPickerのコンポーネントの行数を[self.groupArraycount]として割り当てたので、配列にアクセスしようとしました。そのため、viewController2でも戦術を機能させようとしました。

[vC1.groupArray objectAtIndex:row],as expected the same error: **row undeclared**

では、前のビューにあるピッカービューで選択された行(文字列)にアクセスするにはどうすればよいですか。そうすれば、将来、私のような新入生にとって良い兆候となる、優れたプログラミング習慣を示すことができます:)

いくつかの貴重な提案を手伝ってください

よろしくお願いします:)

4

2 に答える 2

1

ステップ1:appDelegateでNSString変数を取得します。

ステップ2:次のように値を設定して値を取得したい場合は、両方のビューでappDelegateのインスタンスを作成します。

yourApplicationDelegate *appDelegate;

ステップ3:次のように実装ファイルでappDelgateを初期化します

appDelegate = [[UIApplication sharedApplication] delegate];

このステートメントの後、アプリケーションのappDelegateで宣言した両方のViewControllerから文字列変数を使用できます。

それでおしまい。これで、最初のビューから値を割り当て、2番目のビューでそれにアクセスできます。

于 2012-01-04T05:56:42.247 に答える
1

SecondviewでNSStringをグローバルに宣言できます。ボタンを押すと、そのアクションで次のように記述できます。

PickerviewデリゲートメソッドのファイアストビューでNSString*selectedStringをグローバルに取得します

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
   selectedString=    [arrayNo objectAtIndex:row];

//here array is the array used for pickerview 
}

-(IBAction)btnAction:(id)sender
{
SecondView *sec=[[SecondView alloc]initWithNibname:@"SecondView" bundle:nil];
sec.stringFromPrevView=selectedString;
[self presentModalViewController:sec animated:YES];
[sec release];
}

stringFromPrevViewこの文字列は、要件に応じてSecondViewで使用されます

これがあなたのお役に立てば幸いです

于 2012-01-03T06:29:59.550 に答える