2016-08-17 4 views
0

Допустим, у меня есть 2 ViewController: A и B.«EXC_BAD_ACCESS код = 2» Ошибка происходит при попытке установить объект из VC на другой один

Вот некоторые код A:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 
CategoryVC *vc = [storyboard instantiateViewControllerWithIdentifier:@"categoryVC"]; 
PParser *destPP = [[PParser alloc] init]; 
[destPP initWithFullURL:@"http://someurl.com"]; 
//setPp gives the Error EXC_BAD_ACCESS 
[vc setPp:destPP]; 
SWRevealViewControllerSeguePushController *segue = [[SWRevealViewControllerSeguePushController alloc] initWithIdentifier:@"ANY_ID" source:self destination:vc]; 
[segue perform]; 

Вот некоторый код B:

-(void)setPp:(PParser *)pp{ 
    self.pp = pp; 
} 

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

+0

Вы должны объявить 'property' и' 'synthesize' объект PParser' в контроллере назначения вместо переопределения метод установки. –

+0

Setter вызывает бесконечный цикл, потому что 'self.pp =' вызывает себя. Чтобы избежать этого, вы должны ** установить базовую переменную экземпляра '_pp'. Но если вы используете ARC, вам не нужен явный установщик вообще. – vadian

+0

Спасибо, но я где-то читал, что нам больше не нужно использовать синтез с последних версий. это неправильно? – NGG

ответ

2

Попробуйте это:

-(void)setPp:(PParser *)pp 
{ 
    _pp = pp; 
} 
+0

, почему это работает, а не self.pp? – NGG

+0

self.pp = pp аналогичен вызову [self setPp: pp], это рекурсивный вызов. – hwris