我有一个让我发疯的错误。我有NSArray
个问题。该阵列由JSON响应填充。我正在尝试使用它来填充表格视图。
在我的头文件中我正在定义像这样的问题
@interface OneViewController : UITableViewController <MBProgressHUDDelegate> {
NSArray *questions;
MBProgressHUD *HUD;
}
@property (nonatomic, strong) NSArray *questions;
在我的实现中,我像这样实例化
@synthesize questions;
当视图加载时,我正在调用这个函数来ping我的JSON服务
- (void) pullQuestions {
NSMutableDictionary *viewParams = [NSMutableDictionary new];
[viewParams setValue:@"questions" forKey:@"view"];
[PythonView viewGet:viewParams success:^(AFHTTPRequestOperation *operation, id responseObject) {
questions = responseObject;
NSLog(@"Qestions: %@", responseObject);
[self.tableView reloadData];
[HUD hide:YES];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//ALog(@"Failure: %@", [error localizedDescription]);
}];
}
当我收到回复时,我会找出响应对象,这是一个正确格式化的JSON响应。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"VideoFeedCell";
NSInteger count = [questions count];
NSLog(@"Count: %i", count);
for (int i = 0; i < count; i++) {
NSString* body = [questions objectAtIndex:i];
NSLog(@"Object: %@", body);
}
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"VideoFeedCell" owner:self options:nil];
// Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain).
cell = [topLevelObjects objectAtIndex:0];
}
return cell;
}
因此,当我循环执行此操作时,问题计数为4并且数组中的第一个对象被追踪(为空)。第二次尝试执行for循环时,我得到EXC_BAD_ACCESS
。它几乎就像问题阵列消失了。最奇怪的是我在另一个项目中使用几乎完全相同的代码,它工作正常。我甚至使用我在其他项目中使用的相同JSON服务来测试它(所以我知道它没有格式错误或者什么)我仍然得到这个错误。我真的卡住了,我觉得它必须要么保存作为一个数组的JSON响应或者它自己被释放的数组的奇怪之处。
答案 0 :(得分:0)
假设您没有使用ARC,我怀疑问题是您是将responseObject
直接分配给questions
实例变量而不是通过属性。这意味着您没有获得responseObject
的所有权,并且在刷新自动释放池时它将被释放。
尝试更改:
questions = responseObject;
为:
questions = [responseObject retain];
或:
self.questions = responseObject;
并查看是否可以解决问题。
答案 1 :(得分:0)
问题与ARC有关。我开始使用一些旧的锅炉板代码(我曾经建造过的一个带标签的导航项目)。并试图改造它。我没有注意到一个项目战争ARC而另一个项目没有战斗的事实。