xcode 中的 EXC_BAD_ACCESS
Posted
技术标签:
【中文标题】xcode 中的 EXC_BAD_ACCESS【英文标题】:EXC_BAD_ACCESS in xcode 【发布时间】:2011-06-20 12:52:37 【问题描述】:在我的应用程序中,我使用数组来打印表格视图中存在的图像视图中的图像。该数组用于存储我在文本框中输入的组件,每个组件由空格分隔,例如我输入 Boy Girl然后数组会将男孩存储为一个对象,将女孩存储为另一个,然后搜索每个对象的图像。以下是我的代码:-
-(IBAction)Click
//count = [youSaid.text intValue];
//count=1;
//NSArray *sub= [youSaid.text componentsSeparatedByString:@" "];
j=1;
sentence=[youSaid.text componentsSeparatedByString:@" "];
//[substring addObject:youSaid.text];
[tableView reloadData];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = nil;
static NSString *AutoCompleteRowIdentifier = @"AutoCompleteRowIdentifier";
cell = [tableView dequeueReusableCellWithIdentifier:AutoCompleteRowIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:AutoCompleteRowIdentifier] autorelease];
UIImageView * imageView1 = [[[UIImageView alloc] initWithFrame:CGRectMake(25, 4, 80, 80)] autorelease];
UIImageView * imageView2 = [[[UIImageView alloc] initWithFrame:CGRectMake(115,4,80, 80)] autorelease];
UIImageView * imageView3 = [[[UIImageView alloc] initWithFrame:CGRectMake(205,4, 80, 80)] autorelease];
UIImageView * imageView4 = [[[UIImageView alloc] initWithFrame:CGRectMake(295,4, 80, 80)] autorelease];
imageView1.tag = j;
imageView2.tag = j+1;
imageView3.tag = j+2;
imageView4.tag = j+3;
//imageView1.tag=t;
// t++;
// imageView2.tag=t;
// t++;
// imageView3.tag=t;
// t++;
// imageView4.tag=t;
// t++;
[cell.contentView addSubview:imageView1];
[cell.contentView addSubview:imageView2];
[cell.contentView addSubview:imageView3];
[cell.contentView addSubview:imageView4];
//[sentence addObject:@"BLINK"];
// UIImageView * imageView;
//for ( int i = 1; i <= j; i++ )
for ( int i = 1; i <= j; i++ )
imageView = (UIImageView *)[cell.contentView viewWithTag:i];
//button = (UIButton *)[cell.contentView viewWithTag:i];
imageView.image = nil;
//[button setImage:nil forState:UIControlStateNormal];
int photosInRow;
//NSLog([NSString stringWithFormat:@"%d", [sentence count]]);
if ( (indexPath.row < [tableView numberOfRowsInSection:indexPath.section] - 1)
|| ([sentence count] % 4 == 0) )
photosInRow = 4;
else
photosInRow = [sentence count] % 4;
// for ( int i = 1; i <= photosInRow; i++ )
for ( int i = 1; i <=[sentence count]; i++ )
imageView = (UIImageView *)[cell.contentView viewWithTag:i];
//button = (UIButton *)[cell.contentView viewWithTag:i];
[self setImage1:imageView];
//[self setImage1:button];
//imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i]];
//imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", youSaid.text]];
//imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"1.png"]];
//cell.textLabel.text = [autoCompleteArray objectAtIndex:indexPath.row];
return cell;
当我以其他方法访问我的数组时,我得到了 EXC_BAD_ACCESS。这是什么原因。请帮忙。
谢谢, 克里斯蒂
【问题讨论】:
【参考方案1】:添加保留....
sentence=[youSaid.text componentsSeparatedByString:@" "];
[sentence retain];
【讨论】:
是的,它起作用了,你能告诉我原因吗?我的意思是我在 .h fil 中保留了这个 因为 componentsSeparatedByString 返回一个自动释放的对象,而不保留它然后它被释放。您稍后尝试访问它,然后 BOOOOOOM! .h 文件中的retain
属性仅在您使用点符号语法时适用。
只有当你在属性上有一个保留属性时;)【参考方案2】:
如果sentence
是具有retain
属性的类属性,请使用点符号语法,即self.sentence = [youSaid.text componentsSeparatedByString:@" "];
正确保留sentence
对象。确保在 dealloc
方法中释放 sentence
以避免内存泄漏。
【讨论】:
以上是关于xcode 中的 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 8 中的 symbolicatecrash 位于何处?
Interface Builder文件中的Xcode 6未知类
如何在 Xcode 之外运行 Xcode 应用程序? MacOS 独立应用程序与 Xcode 模拟器中的应用程序运行方式不同