Передайте int между представлением и его подпредставлением - PullRequest
1 голос
/ 27 июля 2010

У меня есть представление с именем PatternsViewController и подпредставление с именем SolutionsViewController. Я хочу передать переменную в PatternsViewController с именем итерации моему SolutionsViewController, непосредственно перед тем, как представить ее с

solutions = [[SolutionsViewController alloc] init];
solutions.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
 [self presentModalViewController:solutions animated:YES];

Ответы [ 5 ]

1 голос
/ 28 июля 2010

Я понял это, слегка изменив код Скуи.

В PatternsViewController.m

[solutions setIteration:iteration];

и в SolutionsViewController.m

-(void) setIteration:(int)value {
    iteration = value;
    NSLog(@"Iteration set from value: %d" , iteration);
}
1 голос
/ 27 июля 2010
solutions = [[SolutionsViewController alloc] init];
solutions.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

// Set your value here
[solutions setMyIntWithSomeMethodIWrote:123];

[self presentModalViewController:solutions animated:YES];

А в SolutionsViewController

- (void)setMyIntWithSomeMethodIWrote:(int)value {
    myInstanceVar = value;
}
0 голосов
/ 14 апреля 2013

Выбранный ответ работает для меня, но дает мне семантическое предупреждение.Я немного сохраняю историю предупреждений, даже если код работает, поэтому мне интересно, есть ли способ заставить его работать без предупреждения.

Предупреждение:

Метод экземпляра '-SetPrompt: 'not found (тип возвращаемого значения по умолчанию равен' id ')

Вот что я сделал, следуя ответу на этот вопрос.

В вызывающем файле .m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    vcSelection *ViewSelection = [[vcSelection alloc] initWithNibName:@"vcSelection" bundle:nil];
    ViewSelection.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    if ([[SettingsTableData objectAtIndex:indexPath.row] isEqualToString:DeviceType])
    {
        [ViewSelection SetPrompt:@"Select the device type."];
    }
    else if ([[SettingsTableData objectAtIndex:indexPath.row] isEqualToString:DeviceManufacturer])
    {
        [ViewSelection SetPrompt:@"Select the device manufacturer."];
    }
    else if ([[SettingsTableData objectAtIndex:indexPath.row] isEqualToString:DeviceModel])
    {
        [ViewSelection SetPrompt:@"Select the device model."];
    }
    [self.view addSubview:ViewSelection.view];
}

В принимающем файле .m

@implementation vcSelection

NSMutableString *Prompt;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Debug"
                                                    message:Prompt
                                                   delegate:self
                                          cancelButtonTitle:@"Done"
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];
}

- (void) SetPrompt:(NSMutableString *)Value
{
    Prompt = Value;
}

@end
0 голосов
/ 28 июля 2010

Почему бы просто не переопределить инициализацию дополнительным аргументом, который принимает значение int, которое вы хотите установить? Это позволяет чистое создание экземпляра без дополнительного вызова set.

solutions = [[SolutionsViewController alloc] initWithIntVal: int];
0 голосов
/ 27 июля 2010

Я бы использовал класс Singleton.

Как должен выглядеть мой синглтон Objective C?

Тогда вы можете сделать так:

[SingletonClass sharedInstance].var = iteration;

И получить к нему доступ:*

[SingletonClass sharedInstance].var
...