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];

在上面的调用行中创建了一个新实例alloc,mainMenu 被使用并init使用默认值进行了初始化。

self.sPerson = mainMenu.bPerson;

self.sPerson从默认初始化设置一个值mainMenu.bPerson

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

正如预期的那样,将打印空值,因为没有设置任何值。

可能的解决方案:

您可以使用以下任何一种:

使变量全局、静态、单例,作为参数传递,作为通知发布。

于 2013-02-25T15:28:17.760 回答
0

一种可能的解决方案(不是最好的)是

在 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

我不确定您是否正在使用 segue 并推送 DisplayResultsViewController 但是,在 MainMenuViewController 上的准备 segue 方法中,您可以获得目标视图控制器的实例,该实例将是 DisplayResultsViewController 并在那里设置 sPerson 属性:

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

你是如何在视图控制器之间转换的?

于 2013-02-25T19:18:33.563 回答