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
应用程序尝试访问已释放的对象时发生10个错误。如果在将项目转换为ARC之后发生问题,则在某处发生Zealous发布呼叫(代表ARC)。试着做sortedArray
类的强属性,设置变量为:
self.sortedArray = [array sortUsingDescriptor:...];
那一定是它,因为sortUsingDescriptor:
可能会返回一个自动释放的对象。在一个非弧项目中,您必须使用保留呼叫来封装该呼叫:
[[array sortUsingDescriptor:...]retain];
工作。非常感谢你。我已经浏览了我转换为ARC的课程,并且找不到任何可能导致问题的东西。太奇怪了... –
这不是这个班吗? autorelease池在每个运行周期后触发(我相信),所以tableView刷新发生在一个周期。当你点击表格中的一个对象时,内存被释放。希望这仍然可以在后面的工作 – Justin
是的,这是我在上面提到的PullDownRefresh教程,我转换后发生错误。更不用说,我正在使用这个完全不同的桌子上刷新刷新。 –
崩溃报告的具体含义是什么? –
你在哪里声明'sortedArray'? – David
请同时发布.h文件 – David