1

私は次のようなシナリオを持っています: 私は Xcode を初めて使用し、サンプルも作成しました。実際には、すべてが正常に機能するという点で SplitView Controller を使用しましたが、詳細ビュー コントローラーに関しては、2 つの ViewController を備えたナビゲーション コントローラーを意味します。

その中で、「ピッカー」を使用して場所を取得し、 get location を押すだけで、2番目の View Controller にセグエしますが、ここでは値を取得していません。これがコードの一部です

//ViewController1.h

#import "QuerySubmission.h"

@interface MDDetailViewController : UIViewController <UISplitViewControllerDelegate>
{
    IBOutlet UIPickerView *pickerView;
    NSArray *pickerViewArray;
    NSString *setLocation;


}

@property (nonatomic, retain) NSArray *pickerViewArray;
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property(nonatomic,retain) NSString *setLocation;

@property (strong, nonatomic) id detailItem;

@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;

- (IBAction)getLocation:(id)sender;

@end

//ViewController1.m

 - (IBAction)getLocation:(id)sender {
    int selectedIndex = [self.pickerView selectedRowInComponent:0];
    NSString *message = [NSString stringWithFormat:@"Selected Location: %@",[pickerViewArray objectAtIndex:selectedIndex]];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];

    QuerySubmission *obj = [[QuerySubmission alloc] initWithNibName:@"QuerySubmission" bundle:nil];
    obj.location=[pickerViewArray objectAtIndex:selectedIndex];

    //NSLog(@"loc %@", [ pickerViewArray objectAtIndex:selectedIndex]);
    //[ pickerViewArray objectAtIndex:selectedIndex];
}

ここでは、場所のリストを取得して取得しています

//ViewController2.h

#import <UIKit/UIKit.h>
#import "MDDetailViewController.h"

@interface QuerySubmission : UIViewController <UISplitViewControllerDelegate>
{
    NSString *location;
}

@property(nonatomic,retain) NSString *location;
- (IBAction)querySubmit:(id)sender;

@end

しかし、別のコントローラーに移動するのと同じように。"null" を出力するだけです。私はSplitView Controllerが初めてです。それで、私は何か間違ったことをしていますか、それとも「デリゲート」で何かを宣言する必要がありますか? 必要なことをしてください

4

2 に答える 2

0

このようなタスクには AppDelegate を使用することをお勧めします。

@property(nonatomic,retain) NSString *location;プロパティをファイルで宣言しAppDelegate.hます。

getLocation:メソッドを次のように書き直します。

- (IBAction)getLocation:(id)sender
{
    int selectedIndex = [self.pickerView selectedRowInComponent:0];
    NSString *message = [NSString stringWithFormat:@"Selected Location: %@",[pickerViewArray objectAtIndex:selectedIndex]];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
     [[[UIApplication sharedApplication] delegate] setLocation:(NSString *)[pickerViewArray objectAtIndex:selectedIndex]];
}

では、QuerySubmission次を使用して場所にアクセスできます。

[[[UIApplication sharedApplication] delegate] location];
于 2013-04-01T05:58:45.587 に答える
0

あるコントローラーから次のコントローラーへのセグエを行っている場合、ViewController1 実装に次のコードを追加するだけで、値を簡単に渡すことができます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    QuerySubmission * viewController2 = segue.destinationViewController;
    if(viewController2)
    {
        viewController2.location=[pickerViewArray objectAtIndex:selectedIndex];
    }
}

そして私自身、アプリケーションのデリゲートへの変数の詰め込みを最小限に抑えようとしています。これは、アプリケーションの中断などの UIApplicationDelegate タイプのものに実際に使用する必要があります。

于 2013-04-01T05:59:37.213 に答える