Ios 将NSString变量从UIView传递到UITableView
我试图从UIViewController上声明的UIButton获取当前标题。m将其存储在NSString中,然后将其传递给UITableView控制器,以将其用作NSFetchRequest的参数 MainMenuViewController.hIos 将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
- (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之前将值分配给变量。这只是一个顺序问题,就我个人而言