Передача объекта числа между двумя контроллерами табличного представления: IOS - PullRequest
2 голосов
/ 06 января 2012

Я новичок, пытающийся передать номер строки, выбранный из таблицы в контроллере представления 1, во второй контроллер представления.

Я пытаюсь сделать это, используя объявление свойства для числа в VC1:

@property (nonatomic, retain) NSNumber *passedSectorNumber;

Затем он @synthesized в VC1 и устанавливается с соответствующим номером строки в didSelectRowatIndexPath VC1 таким образом:

self.passedSectorNumber = [NSNumber numberWithInt:[indexPath row]];
        VC2 *vc2 = [[SectorEditor alloc] initWithNibName:@"vc2nibname" bundle:nil];
        [self.navigationController pushViewController:vc2 animated:YES];
        [vc2 release];

В VC2 я также определяю свойство NSNumber с тем же именем и синтезирую его.

В VC2 также:

@property (nonatomic, retain) NSNumber *passedSectorNumber;

Я проверяю переданное значение в VC 2 таким образом:

NSInteger intvalue = [self.passedSectorNumber integerValue];
    NSLog(@"The value of the integer is: %i", intvalue);

Число «получено» в VC2 всегда равно «0», независимо от того, какая строка выбрана.

Я делаю ошибку новичка. Есть идеи где? Очень благодарен за вклад.

1 Ответ

0 голосов
/ 07 января 2012

Предполагая, что ваш второй VC называется SectorEditor:

self.passedSectorNumber = [NSNumber numberWithInt:[indexPath row]];
VC2 *vc2 = [[SectorEditor alloc] initWithNibName:@"vc2nibname" bundle:nil];
[self.navigationController pushViewController:vc2 animated:YES];
[vc2 release];

Должно быть так:

VC2 *vc2 = [[SectorEditor alloc] initWithNibName:@"vc2nibname" bundle:nil];
vc2.passedSectorNumber = [NSNumber numberWithInt:[indexPath row]];
[self.navigationController pushViewController:vc2 animated:YES];
[vc2 release];

Или, что еще лучше, объявите метод класса во втором VC с именем initWithPassedNumber и внутри этого вызова initWithNibName следующим образом:

- initWithPassedSectorNumber:(NSInteger)sectorNumber
{
    if ((self = [super initWithNibName:@"vc2nibname" bundle:nil])) {
         self.passedSectorNumber = sectorNumber
    }
}

Тогда вызов этого будет примерно таким:

VC2 *vc2 = [[SectorEditor alloc] initWithPassedSectorNumber:indexPath.row bundle:nil];
[self.navigationController pushViewController:vc2 animated:YES];
[vc2 release];

Не проверял ни один код, но это будет близко к тому, что вам нужно.

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