Передача информации между видами в навигации - PullRequest
0 голосов
/ 24 октября 2011

Я внедряю навигационный контроллер.Первый вид - это uitableview (представьте приложение Contacts) со списком имен.Второе представление - профиль человека.Поэтому, когда я щелкаю человека в пользовательском приложении, предполагается, что он загружает его профиль.

Как передать данные человека во второе представление?

В didSelectRowAtIndexPath я делаю:

ContactView * varContactView = [[ContactView alloc] initWithNibName:nil bundle:nil];
varContactView.title = [[contactsArray objectAtIndex:indexPath.row] name];
[varContactView initWithPerson:[contactsArray objectAtIndex:indexPath.row]];
[navigationController pushViewController:varContactView animated:YES];

В интерфейсе ContactView у меня есть:

Person * person;

А затем:

@property (nonatomic, retain) Person * person;
-(void) initWithPerson:(Person *)newperson;

И в .m:

@synthesize person
-(void) initWithPerson:(Person *)newperson{
    person = [[Person alloc] init];
    person = newperson;
}

Однако, когда я пытаюсь получить доступ к человеку в ContactView, он всегда говорит EXC_BAD_ACCESS.

Что здесь не так?

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Вместо:

[varContactView initWithPerson:[contactsArray objectAtIndex:indexPath.row]];

вы можете просто использовать:

varContactView.person = [contactsArray objectAtIndex:indexPath.row];

Это будет использовать person setter свойства и назначить данный объект как varContactViewданные.Реализация по умолчанию этого установщика (в случае свойства retain):

- (void)setPerson:(Person *)newPerson
{
    if (person != newPerson) {
        [person release];
        person = [newPerson retain];
    }
}

Это то, чего вы пытаетесь достичь в методе -initWithPerson:.Этот метод не нужен, так как его функциональность покрыта person установщиком свойств.Кстати, не забудьте высвободить свойство person в методе -dealloc вашего контроллера представления:

- (void)dealloc
{
    [person release];
    [super dealloc];
}

Исключение неправильного доступа может быть вызвано чем-то другим в вашем коде, хотя ...

0 голосов
/ 24 октября 2011

В файле .m измените код, указанный ниже.

-(void) initWithPerson:(Person *)newperson
{
    self.person = newperson;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...