私は私を夢中にさせているバグがあります。NSArray
呼ばれる質問があります。配列にはJSON応答が入力されています。これを使用してテーブルビューにデータを入力しようとしています。
ヘッダーファイルで、このような質問を定義しています
@interface OneViewController : UITableViewController <MBProgressHUDDelegate> {
NSArray *questions;
MBProgressHUD *HUD;
}
@property (nonatomic, strong) NSArray *questions;
そして私の実装では、このようにインスタンス化しています
@synthesize questions;
ビューが読み込まれると、JSONサービスにpingを実行するこの関数を呼び出しています
- (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になり、配列の最初のオブジェクトがトレースされます(nullとして)。2回目にforループを実行しようとすると、が取得されますEXC_BAD_ACCESS
。質問の配列が消えたようなものです。最も奇妙な点は、別のプロジェクトでほぼ同じコードを使用していて、正常に機能することです。他のプロジェクトで使用したのと同じJSONサービスでテストしましたが(不正な形式などではないことがわかります)、それでもこのエラーが発生します。配列としてのJSON応答、または配列自体が解放されているという奇妙なもの。