0

UIViewController.m で宣言された UIButton から現在のタイトルを取得して NSString に格納し、それを UITableView コントローラーに渡して NSFetchRequest のパラメーターとして使用しようとしています。

MainMenuViewController.h

    - (IBAction)salesMan:(UIButton *)sender;
    @property (nonatomic,strong) NSString *bPerson;

MainMenuViewController.m

    #import "MainMenuViewController.h"
    #import "DisplayResultsViewController.h"

    // more code here...

    - (IBAction)salesMan:(UIButton *)sender {

        self.bPerson = sender.currentTitle;
    }
    @end

DisplayResultsViewController.h

    @property (nonatomic, strong) NSString *sPerson;

DisplayResultsViewController.m

   - (void)viewDidLoad
   {
        [super viewDidLoad];
        AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        context = [appDelegate managedObjectContext];

        MainMenuViewController *mainMenu = [[MainMenuViewController alloc]init];

        self.sPerson = mainMenu.bPerson;
        NSLog(@" %@", self.sPerson);

    }

問題は、NSLog が「null」を返す変数を渡していないことです。

4

3 に答える 3

3

MainMenuViewController *mainMenu = [[MainMenuViewController alloc]init];

上記の呼び出し行で新しいインスタンスが作成され、mainMenu が作成され、デフォルト値allocでialized されます。init

self.sPerson = mainMenu.bPerson;

self.sPerson初期化されたデフォルトから値が設定されますmainMenu.bPerson!!!

NSLog(@" %@", self.sPerson);

値が設定されていないため、期待どおり null が出力されます。

考えられる解決策:

次のいずれかを使用できます。

変数をグローバル、静的、シングルトンにし、引数として渡し、通知として投稿します。

于 2013-02-25T15:28:17.760 に答える
0

考えられる解決策の1つ(最善ではない)は

AppDelegate.h内(MainMenuViewController.hから移動)

@property (nonatomic,strong) NSString *bPerson;

MainMenuViewController.mで

 - (IBAction)salesMan:(UIButton *)sender {
    AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        [appDelegate setBPerson:sender.currentTitle];
    }

DisplayResultsViewController.mで

- (void)viewDidLoad
   {
        [super viewDidLoad];
        AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        context = [appDelegate managedObjectContext];

        MainMenuViewController *mainMenu = [[MainMenuViewController alloc]init];

        self.sPerson = [appDelegate bPerson];
        NSLog(@" %@", self.sPerson);

    }
于 2013-02-25T19:00:19.503 に答える
0

セグエを使用して DisplayResultsViewController をプッシュしているかどうかはわかりませんが、MainMenuViewController のセグエ メソッドの準備で、DisplayResultsViewController である宛先ビュー コントローラーのインスタンスを取得し、そこに sPerson プロパティを設定できます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    DisplayResultsViewController *drvc = (DisplayResultsViewController *)[segue destinationViewController];
    drvc.sPerson = self.bPerson
}

ビュー コントローラ間をどのように移行していますか?

于 2013-02-25T19:18:33.563 に答える