我有一个PlaceAnnotation类,我填入NSMutableArray。在viewDidLoad中,我发起了ihatethis
_ihatethis = [[NSMutableArray alloc]init];
我使用MKLocalSearchCompletionHandler进行搜索。并处理这样的mapitems:
for (MKMapItem *mapItem in [response mapItems]){
PlaceAnnotation *place = [[PlaceAnnotation alloc] init];
[place assignTitle:[[mapItem placemark] name];
[_ihatethis addObject:place];
}
[_ihatethis removeObjectAtIndex:2]; /*BAD ACCESS HERE*/
[_tableView reloadData];
这是我的PlaceAnnotation.h文件
@interface PlaceAnnotation : CLPlacemark <MKAnnotation>
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic) NSDictionary* dict;
//@property (nonatomic) NSURL *url;
@property (nonatomic) NSString *phoneNum;
@property (readonly) BOOL selected;
-(void)assignTitle:(NSString *)newTitle;
-(void)assignSelected:(BOOL) boolVal;
这是我的PlaceAnnotation.m文件
#import "PlaceAnnotation.h"
@interface PlaceAnnotation ()
@property (readwrite) NSString *title;
@property (readwrite) BOOL selected;
@end
@implementation PlaceAnnotation
-(void) assignTitle:(NSString *)newTitle {
if ( ![newTitle isEqualToString:[self title]]){
self.title = newTitle;
}
}
-(void) assignSelected:(BOOL)boolVal{
self.selected = boolVal;
}
@end
@end
这是我的第一篇文章,我已经阅读了大量回答exc_bad_access问题的答案,我无法弄清楚这一点。所以我认为不知何故,地方注释被遗忘和释放。所以,当我去删除后,它就消失了。我真的很困惑和生气。
答案 0 :(得分:1)
如果崩溃真的在这一行[_ihatethis removeObjectAtIndex:2];
并且它是EXC_BAD_ACCESS那么有两种可能性:
_ihatethis
指向一个损坏的数组(如果循环通过,则不太可能)。dealloc
方法中破坏了内存管理。答案 1 :(得分:0)
可能是您尝试删除索引大于数组计数的项目。尝试在[_ihatethis removeObjectAtIndex:2];
之前输出计数,如下所示:
`
NSLog(@"count: %d", [_ihatethis count]);
[_ihatethis removeObjectAtIndex:2]; /*BAD ACCESS HERE*/
`
如果计数小于3,那么您正在尝试删除数组边界外的索引处的对象。
答案 2 :(得分:0)
我改变了这个
@interface PlaceAnnotation : CLPlacemark <MKAnnotation>
到这个
@interface PlaceAnnotation : NSObject <MKAnnotation>
所以我猜问题就在于CLPlacemark的dealloc。感谢