2010-03-30 1 views
3

У меня есть целочисленная переменная (время) в одном представлении контроллера, значение которого мне нужно в другом контроллере представления. Вот код:Как получить доступ к значениям переменных из одного контроллера представления в другом?

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, я хочу, чтобы обработать время на основе его стоимости

ResultsViewController

- (void)viewDidLoad 
{ 
    if(time < 3) 
     {// Do something} 

    else if ((time > 3) && (time < 6)) 
     {// Do something else} 

//etc... 

    [super viewDidLoad]; 
} 

Я своего рода непонятно, когда необходимо @property и @synthesize. Так ли это в этой ситуации? Любая помощь будет принята с благодарностью.

Спасибо! Томас

ответ

6

Объявить time как свойство в MediaMeterViewController:

@property (nonatomic) NSInteger time; 

Всякий раз, когда вам нужно получить доступ к переменному экземпляру в другом объекте, вы должны иметь переменный экземпляр объявленные как свойство, и при объявлении свойства вы должны всегда использовать @synthesize (чтобы синтезировать геттер и сеттер для этого свойства).

Также обратите внимание, что при установке time в MediaMeterViewController вы всегда должны использовать self.time вместо time. Например, time = 0; должен быть self.time = 0;.

Чтобы получить доступ time от вашего ResultsViewController, вы могли бы сделать что-то вроде этого:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    if (mmvc.time < 3) 
    { 
     // Do something 
    } 

    else if ((mmvc.time > 3) && (mmvc.time < 6)) 
    { 
    // Do something else 
    } 

    // etc...  
} 

Где mmvc является ссылкой на ваш MediaMeterViewController объекта. Надеюсь это поможет.

+0

Большое спасибо за ответ! У меня было несколько вопросов Компилируя, но я не понял, что в дополнение к #import «MediaMeterViewController.h» я должен был также @class MediaMeterViewController. – Thomas

+0

Привет, у меня есть вопрос, связанный с этим, если у меня есть NSString на месте NSInteger (время), я обязан выполнять @property (неатомное, сохранить) время NSInteger; ? или без сохранения? спасибо – Malloc

Смежные вопросы