我试图在responseObject
中显示TableView
,但没有显示任何内容。我可以打印出所有responseObject
的值,但在运行应用时TableView
中没有显示任何内容。在.m文件中,我在ViewDidLoad中有这个:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",access_token] forHTTPHeaderField:@"Authorization"];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSLog(@"Info: %@", responseObject);
dataArray = [[NSArray alloc]initWithObjects:responseObject, nil];
//[self.tableViewObject reloadData];
self.tableViewObject.dataSource = self;
self.tableViewObject.delegate = self;
NSLog(@"TableView: %@", _tableViewObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
如果我取消注释[self.tableViewObject reloadData];
,则会出现此错误:
libc ++ abi.dylib:以未捕获的类型异常终止 NSException
.m文件中的tableView
看起来像是:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [dataArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
}
cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
return cell;
}
.h文件如下所示:
#import <UIKit/UIKit.h>
@interface MyCardsVC : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
NSArray *dataArray;
}
@property (weak, nonatomic) IBOutlet UITableView *tableViewObject;
@end
我不知道自己做错了什么。我应该把它连接好......
答案 0 :(得分:0)
你还没有分配任何数据源和委托,你现在正在重新加载tableView你必须首先分配dataSource然后重新加载TableView像这样
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",access_token] forHTTPHeaderField:@"Authorization"];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSLog(@"Info: %@", responseObject);
dataArray = [[NSArray alloc]initWithObjects:responseObject, nil];
self.tableViewObject.dataSource = self;
self.tableViewObject.delegate = self;
[self.tableViewObject reloadData];
NSLog(@"TableView: %@", _tableViewObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
希望它会对你有所帮助。
答案 1 :(得分:0)
首先,您需要按照Muhammad Waqas Bhati的建议修改您的请求代码。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",access_token] forHTTPHeaderField:@"Authorization"];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSLog(@"Info: %@", responseObject);
dataArray = [[NSArray alloc]initWithObjects:responseObject, nil];
self.tableViewObject.dataSource = self;
self.tableViewObject.delegate = self;
[self.tableViewObject reloadData];
NSLog(@"TableView: %@", _tableViewObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
由于您只想在单元格中显示card1..cardn,因此您应该将cellForRowAtIndexPath
修改为这样。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
}
NSDictionary *objectDict = [dataArray objectAtIndex:indexPath.row];
/* if you want the label to follow card state, use the first cell.textLabel.text option
if you prefer using table view row, use the second cell.textLabel.text
*/
cell.textLabel.text = [NSString stringWithFormat:@"Card%d", [objectDict valueForKey:@"cardState"]];
//cell.textLabel.text = [NSString stringWithFormat:@"Card%d", indexPath.row];
return cell;
}
下一步是实施didSelectRowAtIndexPath
委托。
点击单元格时会使用此委托,因为您要打开新页面,新页面必须知道正在点击的单元格及其包含的信息。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *objectDict = [dataArray objectAtIndex:indexPath.row];
NSLog(@"%@", objectDict);
// Pass object to new page
}
如果您不确定如何在视图之间传递变量,this可以帮助您。