我有3段的段控制,最初它在tableview中显示数据。当我点击其他段时,它给了我这个例外。真的很难搞清楚是什么问题。如果需要,我可以发布代码。
libobjc.A.dylib`objc_msgSend:
0x192308c: movl 8(%esp), %ecx
0x1923090: movl 4(%esp), %eax
0x1923094: testl %eax, %eax
0x1923096: je 0x19230e8 ; objc_msgSend + 92
0x1923098: movl (%eax), %edx
0x192309a: pushl %edi
0x192309b: movl 8(%edx), %edi <-------HERE
0x192309e: pushl %esi
0x192309f: movl (%edi), %esi
0x19230a1: movl %ecx, %edx
0x19230a3: shrl $2, %edx
0x19230a6: andl %esi, %edx
0x19230a8: movl 8(%edi,%edx,4), %eax
0x19230ac: testl %eax, %eax
0x19230ae: je 0x19230b9 ; objc_msgSend + 45
0x19230b0: cmpl (%eax), %ecx
0x19230b2: je 0x19230d0 ; objc_msgSend + 68
0x19230b4: addl $1, %edx
0x19230b7: jmp 0x19230a6 ; objc_msgSend + 26
0x19230b9: popl %esi
0x19230ba: popl %edi
0x19230bb: movl 4(%esp), %edx
0x19230bf: movl (%edx), %eax
我的细分切换方法。它的第1段是不工作的。
- (IBAction)segmentSwitch:(id)sender
{
NSInteger selectedSegment = [sender selectedSegmentIndex];
if(selectedSegment == 0)
{
[tableview1 reloadData];
}
if(selectedSegment == 1)
{
NSLog(@"Above reloaddata");
[tableview1 reloadData];
NSLog(@"Below reloaddata");
}
if(selectedSegment == 2)
{
UIAlertView *save = [[[UIAlertView alloc]
initWithTitle:@"Alert!"
message:@"No Data Found"
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles: nil] autorelease];
[save show];
}
}
TableView代理
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(tableView == tableview1){
NSInteger selectedSegment = segmentControl.selectedSegmentIndex;
if(selectedSegment == 0)
return arraycontacts.count;
if(selectedSegment == 1)
{
return phPatch.count;
}
}
else
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell==nil)
{
cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease];
}
if(tableView == tableview1){
NSInteger selectedSegment = segmentControl.selectedSegmentIndex;
if(selectedSegment == 0){
NSLog(@"In segment 0");
cell.textLabel.text=[arraycontacts objectAtIndex:indexPath.row];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UILabel *typeLabel = [[[UILabel alloc]init]autorelease];
typeLabel.backgroundColor = [UIColor clearColor];
typeLabel.text = [arraypatch objectAtIndex:indexPath.row];
typeLabel.textAlignment = UITextAlignmentCenter;
typeLabel.frame = CGRectMake(300,2.0f,150,50);
[cell addSubview:typeLabel];
UILabel *typeLabel1 = [[[UILabel alloc]init]autorelease];
typeLabel1.backgroundColor = [UIColor clearColor];
typeLabel1.text = [arrayclass objectAtIndex:indexPath.row];
typeLabel1.textAlignment = UITextAlignmentCenter;
typeLabel1.frame = CGRectMake(400,2.0f,150,50);
[cell addSubview:typeLabel1];
UILabel *typeLabel2 = [[[UILabel alloc]init]autorelease];
typeLabel2.backgroundColor = [UIColor clearColor];
typeLabel2.text = [arrayspeciality objectAtIndex:indexPath.row];
typeLabel2.textAlignment = UITextAlignmentCenter;
typeLabel2.frame = CGRectMake(500,2.0f,250,50);
[cell addSubview:typeLabel2];
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(770,2.0f,250,50)] autorelease];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(10,0, 150, 40);
[btn setTitle:@"Precall" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(precallClicked:) forControlEvents:UIControlEventTouchUpInside];
[headerView addSubview:btn];
[cell addSubview:headerView];
cell.tag = indexPath.row;
}
if(selectedSegment == 1){
NSLog(@"In segment 1");
cell.textLabel.text=[phPatch objectAtIndex:indexPath.row];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UILabel *typeLabel = [[[UILabel alloc]init]autorelease];
typeLabel.backgroundColor = [UIColor clearColor];
typeLabel.text = [phName objectAtIndex:indexPath.row];
typeLabel.textAlignment = UITextAlignmentCenter;
typeLabel.frame = CGRectMake(300,2.0f,150,50);
[cell addSubview:typeLabel];
UILabel *typeLabel1 = [[[UILabel alloc]init]autorelease];
typeLabel1.backgroundColor = [UIColor clearColor];
typeLabel1.text = [phClass objectAtIndex:indexPath.row];
typeLabel1.textAlignment = UITextAlignmentCenter;
typeLabel1.frame = CGRectMake(400,2.0f,150,50);
[cell addSubview:typeLabel1];
}
}
return cell;
}
谢谢。
答案 0 :(得分:0)
汇编代码没有多大帮助。
你得到的是因为你正在向已发布的对象发送消息。
要调试糟糕的访问内容而不是运行,只需执行配置文件,然后选择僵尸对象。
将所有对象保存在内存中,并显示错误的来源。
答案 1 :(得分:0)
我设法解决了这个问题。问题在于
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
if(tableView == tableview1){
NSInteger selectedSegment = segmentControl.selectedSegmentIndex;
if(selectedSegment == 0)
return @" Doctor Patch Class Speciality";
else <------ This Else was not there, the reason is was giving BAD ACCESS ERROR.
return @"";
}
else
return @" Patch Pharmacy Name Class";
}
无论如何,thanx。