UITableViewCell
。我从服务中获取数据并重新加载我的UITableView
。前8-9个项目显示完美,但是当我滚动EXC_BAD_ACCESS时发生错误。错误发生在cellForRowAt
方法上。我认为这是因为Objective-C中的内存管理。看来我没有正确使用分配或释放相关的东西。问题是如何避免该错误以及为什么会发生?这是我的完整代码:@interface ViewController () <UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *movieTableView;
@end
@implementation ViewController
MovieService *service;
NSArray<Movie*> * moviesList;
- (void)viewDidLoad {
[super viewDidLoad];
service = [[MovieService alloc] init];
[self fetchMovies];
}
- (void) fetchMovies {
[service getMovies:^(NSMutableArray<Movie *> *movies) {
moviesList = movies;
[self.movieTableView reloadData];
}];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return moviesList.count;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"some-cell" forIndexPath:indexPath];
cell.textLabel.text = moviesList[indexPath.row].movieName;
return cell;
}
@end
NSArray<Movie*> * moviesList;
声明为NSMutableArray
并在viewDidload
分配中并将其初始化,如下所示, moviesList = [[NSMutableArray alloc] init];