我在一个 View Controller 中有一个整型变量 (time),我需要在另一个 View Controller 中使用它的值。这是代码:
MediaMeterViewController
// TRP - On Touch Down event, start the timer
-(IBAction) startTimer
{
time = 0;
// TRP - Start a timer
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
[timer retain]; // TRP - Retain timer so it is not accidentally deallocated
}
// TRP - Method to update the timer display
-(void)updateTimer
{
time++;
// NSLog(@"Seconds: %i ", time);
if (NUM_SECONDS == time)
[timer invalidate];
}
// TRP - On Touch Up Inside event, stop the timer, decide stress level, display results
-(IBAction) btn_MediaMeterResults
{
[timer invalidate];
NSLog(@"Seconds: %i ", time);
ResultsViewController *resultsView = [[ResultsViewController alloc] initWithNibName:@"ResultsViewController" bundle:nil];
[self.view addSubview:resultsView.view];
}
在 ResultsViewController 中,我想根据它的值处理时间
结果 View Controller
- (void)viewDidLoad
{
if(time < 3)
{// Do something}
else if ((time > 3) && (time < 6))
{// Do something else}
//etc...
[super viewDidLoad];
}
我不太清楚何时需要@property 和@synthesize。在这种情况下是这样吗?任何帮助将不胜感激。
谢谢! 托马斯
最佳答案
将 time
声明为 MediaMeterViewController
中的一个属性:
@property (nonatomic) NSInteger time;
每当你需要访问另一个对象中的实例变量时,你应该将实例变量声明为一个属性,当你声明一个属性时,你必须始终使用@synthesize
(合成getter和该属性的 setter )。
另请注意,在 MediaMeterViewController
中设置 time
时,您必须始终使用 self.time
而不是 time
.例如,time = 0;
应该是 self.time = 0;
。
要从您的 ResultsViewController
访问 time
,您可以这样做:
- (void)viewDidLoad
{
[super viewDidLoad];
if (mmvc.time < 3)
{
// Do something
}
else if ((mmvc.time > 3) && (mmvc.time < 6))
{
// Do something else
}
// etc...
}
mmvc
是对您的 MediaMeterViewController
对象的引用。希望这会有所帮助。
关于objective-c - 如何从一个 View Controller 访问另一个 View Controller 的变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548910/