【发布时间】:2011-10-19 17:41:24
【问题描述】:
我有一个类模仿UIImagePickerController 的行为,除了一些细微的差别。在我的课堂上,我只使用一个视图控制器,并在用户进行行/缩略图选择时使用它来交换相册表视图和照片表视图。所以导致我出现问题的事件顺序如下:
- 我选择相册
- 照片表格视图加载,我按下后退按钮返回 到专辑表格视图
- 相册表格视图加载
- 我选择了一个相册,现在触发内存访问错误
我已经在 ivars 中实现了 tableview 和数组,如下所示:
@property (nonatomic, retain) UITableView *selectAnAlbumTableView, *selectAPhotoTableView;
@property (nonatomic, retain) NSMutableArray *albums, *photos;
@property (nonatomic, retain) ALAssetsGroup *album;
@property (nonatomic, retain) UIActivityIndicatorView *spinner;
相册表格视图和照片表格视图之间的一个区别是,每次用户选择相册时都会重新创建照片表格视图,这就是发生错误的地方。最初,当我删除 tableview 时出现“EXC_BAD_ACCESS”,就像我在这里做的那样:
[[self selectAPhotoTableView] removeFromSuperview];
[selectAPhotoTableView release];
selectAPhotoTableView = nil;
[photos release];
photos = nil;
我注意到错误发生在[photos release]。 Photos 是我存储放置在照片 tableview 上的单元格中的所有缩略图按钮的数组。如果我删除了[photos release] 和photos = nil,那么当实际创建tableview 时就会出现问题(正如我最初提到的那样):
NSMutableArray *photosTemp = [[NSMutableArray alloc] init];
[self setPhotos: photosTemp];
[photosTemp release];
现在“EXC_BAD_ACCESS”在[self setPhotos: photosTemp]; 行之后被抛出。有谁知道我在这里做错了什么?
更新:我在第二次出现错误的位置输入了错误的代码,现在已修复。
【问题讨论】:
-
我们能看到错误吗?还有 ivars 的 @property 语句
-
@Max MacLeod 我已经在帖子中添加了您要求的内容。错误是“EXC_BAD_ACCESS”,上面列出了属性语句。感谢您的询问。
-
能否启用僵尸并查看它是否会触发发送到已释放实例错误的消息?通过编辑你的方案在 xcode4 中启用僵尸,并选中诊断下的僵尸启用复选框
-
@MaxMacleod 嘿,Max,我按照您的要求做了,在控制台显示错误之前,我得到“2011-10-20 04:55:31.304 CustomImagePicker[21510:307] *** -[UIImage isKindOfClass:]: 消息发送到已释放实例 0x197850"
-
@MaxMacleod 谢谢这帮助我找出问题所在。由于某种原因,这条线导致了泄漏: thumbnailImage = [UIImage imageWithCGImage:[theALSset thumbnail]];知道为什么这不起作用吗?
标签: iphone ios cocoa-touch uiview uiviewcontroller