iOS EXC_BAD_ACCESS错误

问题描述:

我的应用程序工作正常,几分钟后,在编辑应用程序的另一部分后,它开始从视图控制器中抛出EXC_BAD_ACCESS错误,我甚至没有处理它。我之间做的唯一可以想到的可能会影响它的事情是,我Edit-> Refractor-> Convert to Obj-C ARC ...我只对指定的文件做了它,而不是我的整个项目,它是混乱。当我相信错误开始发生时,我正在按照本教程进行操作... http://sonnyparlin.com/2011/12/pulltorefresh-ios-5-and-arc-tutorial/ 此外,应用程序启动正常,它只是在tableview中单击某个单元时崩溃。任何帮助将不胜感激!iOS EXC_BAD_ACCESS错误

错误发生在这条线:

self.releaselink = [[sortedArray objectAtIndex:indexPath.row] objectForKey:@"link"]; 

这里是我的代码,其中的误差源自:

@implementation PressReleaseViewController 

@synthesize releaselink; 

UILabel *departmentNamesLabel; 
CGRect *departmentNamesFrame; 

- (void)viewDidLoad { 

// Load path to plist and sort based on "name" 

NSString *path = [[NSBundle mainBundle] pathForResource: 
        @"departments" ofType:@"plist"]; 
array = [[NSMutableArray alloc] initWithContentsOfFile:path]; 
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
sortedArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 
} 

// How many sections are in the table 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
return 1; 
} 

// Set how many rows of cells are in the table 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
return [sortedArray count]; 
} 

// Set up table view and format for cells 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 

// Set text for each cell 

cell.textLabel.text = [[sortedArray objectAtIndex:indexPath.row] objectForKey:@"name"]; 

return cell; 
} 

// Set how tall each cell is 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
return 40; 
} 

// Set push to new view controller 

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

self.releaselink = [[sortedArray objectAtIndex:indexPath.row] objectForKey:@"link"]; 

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil]; 
MainViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"main"]; 
[vc setReleaseLink:self.releaselink]; 
[self.navigationController pushViewController:vc animated:YES]; 

} 

- (void)viewDidUnload { 
pressReleases = nil; 
[super viewDidUnload]; 
} 
@end 

头文件”

@interface PressReleaseViewController : UITableViewController { 

IBOutlet UITableView *pressReleases; 
NSArray *array; 
NSArray *sortedArray; 
NSString *releaselink; 

} 

@property (nonatomic, retain) NSString *releaselink; 

@end 
+0

崩溃报告的具体含义是什么? –

+0

你在哪里声明'sortedArray'? – David

+0

请同时发布.h文件 – David

应用程序尝试访问已释放的对象时发生10个错误。如果在将项目转换为ARC之后发生问题,则在某处发生Zealous发布呼叫(代表ARC)。试着做sortedArray类的属性,设置变量为:

self.sortedArray = [array sortUsingDescriptor:...]; 

那一定是它,因为sortUsingDescriptor:可能会返回一个自动释放的对象。在一个非弧项目中,您必须使用保留呼叫来封装该呼叫:

[[array sortUsingDescriptor:...]retain]; 
+0

工作。非常感谢你。我已经浏览了我转换为ARC的课程,并且找不到任何可能导致问题的东西。太奇怪了... –

+0

这不是这个班吗? autorelease池在每个运行周期后触发(我相信),所以tableView刷新发生在一个周期。当你点击表格中的一个对象时,内存被释放。希望这仍然可以在后面的工作 – Justin

+0

是的,这是我在上面提到的PullDownRefresh教程,我转换后发生错误。更不用说,我正在使用这个完全不同的桌子上刷新刷新。 –