Как получить доступ к значениям переменных из одного контроллера представления в другом? - PullRequest
3 голосов
/ 31 марта 2010

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

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. Так ли это в этой ситуации? Любая помощь будет принята с благодарностью.

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

1 Ответ

6 голосов
/ 31 марта 2010

Объявите 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 объект. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...