Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将NSString变量从UIView传递到UITableView_Ios_Objective C_Cocoa Touch_Uitableview - Fatal编程技术网

Ios 将NSString变量从UIView传递到UITableView

Ios 将NSString变量从UIView传递到UITableView,ios,objective-c,cocoa-touch,uitableview,Ios,Objective C,Cocoa Touch,Uitableview,我试图从UIViewController上声明的UIButton获取当前标题。m将其存储在NSString中,然后将其传递给UITableView控制器,以将其用作NSFetchRequest的参数 MainMenuViewController.h - (IBAction)salesMan:(UIButton *)sender; @property (nonatomic,strong) NSString *bPerson; @property (nonatomic, s

我试图从UIViewController上声明的UIButton获取当前标题。m将其存储在NSString中,然后将其传递给UITableView控制器,以将其用作NSFetchRequest的参数

MainMenuViewController.h

    - (IBAction)salesMan:(UIButton *)sender;
    @property (nonatomic,strong) NSString *bPerson;
    @property (nonatomic, strong) NSString *sPerson;
@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
   - (void)viewDidLoad
   {
        [super viewDidLoad];
        AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        context = [appDelegate managedObjectContext];

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

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

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

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

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

    // more code here...

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

        self.bPerson = sender.currentTitle;
    }
    @end
   - (void)viewDidLoad
   {
        [super viewDidLoad];
        AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        context = [appDelegate managedObjectContext];

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

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

    }
 - (IBAction)salesMan:(UIButton *)sender {
    AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        [appDelegate setBPerson:sender.currentTitle];
    }
问题是它没有传递NSLog返回“null”的变量

MainMenuViewController*主菜单=[[MainMenuViewController] alloc]init]

在上面的调用行中创建了一个新实例,主菜单是
alloc
ated,并且
init
用默认值进行了序列化

self.sPerson=main menu.bPerson

self.sPerson
是从默认初始化的
main菜单中设置的值。bPerson

NSLog(@“%@”,self.sPerson)

由于未设置任何值,因此将按预期打印空值

可能的解决办法:

您可以使用以下任一选项:

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

MainMenuViewController*主菜单=[[MainMenuViewController] alloc]init]

在上面的调用行中创建了一个新实例,主菜单是
alloc
ated,并且
init
用默认值进行了序列化

self.sPerson=main menu.bPerson

self.sPerson
是从默认初始化的
main菜单中设置的值。bPerson

NSLog(@“%@”,self.sPerson)

由于未设置任何值,因此将按预期打印空值

可能的解决办法:

您可以使用以下任一选项:

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

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

在AppDelegate.h中(从MainMenuViewController.h移动)

在MainMenuViewController.m中

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

    // more code here...

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

        self.bPerson = sender.currentTitle;
    }
    @end
   - (void)viewDidLoad
   {
        [super viewDidLoad];
        AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        context = [appDelegate managedObjectContext];

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

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

    }
 - (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);

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

在AppDelegate.h中(从MainMenuViewController.h移动)

在MainMenuViewController.m中

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

    // more code here...

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

        self.bPerson = sender.currentTitle;
    }
    @end
   - (void)viewDidLoad
   {
        [super viewDidLoad];
        AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
        context = [appDelegate managedObjectContext];

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

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

    }
 - (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);

    }

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

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

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

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

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

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

这与您的问题是正交的,但遵循MVC最佳实践,您不应该将模型与视图混合。也就是说,您正在从按钮(视图)的标题设置bPerson属性(您的模型)。那么,为了从UIButton获取标题并将其作为NSString传递给TableViewConrtoller,以便将其用作谓词的参数,您有何建议?这就是想法:用户按下按钮标题被发送到表视图控制器,以获取谓词参数TableViewController根据按下的按钮显示获取请求。按钮标题代表什么?我假设你的模型中有一些东西。通常,您希望将模型作为属性存储在视图控制器上,并引用模型以将值传递给其他控制器(或传递整个模型)。斯坦福大学有一些超级棒的iOS开发课程在iTunes U:上免费提供。第一个,MVC和Objective-C简介应该提供一些好的背景。谢谢,我将观看它们。这与您的问题是正交的,但是遵循MVC最佳实践,您不应该将您的模型与您的视图混为一谈。也就是说,您正在从按钮(视图)的标题设置bPerson属性(您的模型)。那么,为了从UIButton获取标题并将其作为NSString传递给TableViewConrtoller,以便将其用作谓词的参数,您有何建议?这就是想法:用户按下按钮标题被发送到表视图控制器,以获取谓词参数TableViewController根据按下的按钮显示获取请求。按钮标题代表什么?我假设你的模型中有一些东西。通常,您希望将模型作为属性存储在视图控制器上,并引用模型以将值传递给其他控制器(或传递整个模型)。斯坦福大学有一些超级棒的iOS开发课程在iTunes U:上免费提供。第一个,MVC和Objective-C简介应该提供一些好的上下文。谢谢,我将观看它们。那么,为了从UIButton中获取标题并将其作为NSString传递给TableViewConrtoller,以便将其用作谓词的参数,您有何建议?这就是想法:用户按下按钮标题被发送到表视图控制器,以获取谓词参数TableViewController基于按钮按下按钮显示获取请求静态或作为参数。因此,您建议如何从UIButton获取标题,并将其作为NSString传递给TableViewConrtoller,以便将其用作参数谓词的参数?这就是想法:用户按下按钮标题被发送到表视图控制器以获取谓词参数TableViewController根据按下的按钮显示获取请求a static或作为参数i计算出来!!我在我的故事板中使用了一个ctrl-drag序列,在didselectrow为变量赋值之前,prepareforsegue被触发。我必须从didselectrow切换到manual segue,并在触发segue之前将值分配给变量。这只是一个顺序问题,就我个人而言