Ошибка EXC_BAD_ACCESS в очень простом коде - PullRequest
0 голосов
/ 11 июня 2011

Я использую контроллер nav и помещаю другое представление в стек, а также задаю переменную.При попытке получить доступ к переменной я получаю EXEC_BAD_ACCESS: (

Вот код (я не использую никакой NIB):

#import <UIKit/UIKit.h>


@interface detailedView : UIViewController {

NSString *movieName2;
}

@property (nonatomic, retain) NSString *movieName2;

@end

и

#import "detailedView.h"


@implementation detailedView

@synthesize movieName2;



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

-(void) viewDidAppear:(BOOL)animated
{

self.view=[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view.frame=CGRectMake(213, 300, 355, 315);
self.view.backgroundColor=[[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"black.png"]];



self.title=self.movieName2;
NSLog(@"%@",movieName2);
}   

Соответствующий кодв функции вызывающей стороны:

detailedView *details;


@property (nonatomic, retain) detailedView *details;

// правильно синтезирован и выпущен

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

NSLog(@"Did Reach inside...");

status=1;

self.title=@"Back";
details.movieName2=self.movieName;

NSLog(@"```");
NSLog(@"2nd VC %@ sdfsdf",details.movieName2); //Getting the ERROR here
NSLog(@"1st VC %@ wrewrw",self.movieName);
//viewerSearch *viewerSearchController=[[viewerSearch alloc] init];



[[self navigationController] pushViewController:details animated:NO];    

}

init:

 details=[[detailedView alloc] init];

// movieName является строкой NSString и имеет @property(неатомическая, копия)

Ответы [ 3 ]

1 голос
/ 11 июня 2011

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

Также - имена классов всегда должны начинаться с заглавной буквы.

Попробуйте построить и проанализировать; проверьте правильность управления памятью.

Затем включите обнаружение зомби, как только вы исправите сборку и проанализируете найденные проблемы.

0 голосов
/ 11 июня 2011

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

@property (nonatomic, retain) NSString *movieName2;

на

@property (nonatomic, copy) NSString *movieName2;

, вероятно, решит вашу проблему.

Кроме того, если вы создаете значение в self.movieName с помощью @"something", сделайтене выпускать значение.

0 голосов
/ 11 июня 2011

Основываясь на тесте, вызвав retain на alloc-init-release d NSString, а затем проследив его, зарегистрировав его, я думаю, что ваша проблема в том, что self.movieName освобожден. Пожалуйста, проверьте, правильно ли соблюдены правила управления памятью в отношении self.movieName.

В примечании, если вы не используете NIB для detailedView, вам следует создать представление в loadView, а не viewDidAppear:, как вы это делаете. viewWillAppear: только если представление существует, верно? Я предлагаю вам переместить соответствующий код с viewDidAppear: на loadView.

...