gpt4 book ai didi

ios - AFNetworking 2.0 解析的数据未在 TableView 中显示

转载 作者:行者123 更新时间:2023-11-29 03:04:52 24 4
gpt4 key购买 nike

我的问题:表格中没有显示任何数据。

下面是用于检索 json 对象数组并使用 AFNetworking 2.0 对其进行解析的代码。我有一个 UIViewController,我在其中放置了一个带有原型(prototype)单元格的 TableView ,该原型(prototype)单元格具有重用标识符 EventCell。我想要的只是在每个单元格中显示标题和图像。我在运行时没有收到任何错误。

NSDictionary+events.h

#import <Foundation/Foundation.h>

@interface NSDictionary (events)

- (NSString *)eventImage;
- (NSString *)eventTitle;
- (NSDate *)eventDate;
- (NSNumber *)eventPrice;
- (NSNumber *)eventTicketsTotal;
@end

NSDictionary+events.m

#import "NSDictionary+events.h"

@implementation NSDictionary (events)



- (NSString *)eventImage
{
return self[@"event_image"];

}

- (NSString *)eventTitle
{
return self[@"event_title"];

}

- (NSDate *)eventDate
{
// NSString *dateStr = self[@"date"]; // date = "2013-01-15";
return [NSDate date];
}

- (NSNumber *)eventPrice
{
NSString *cc = self[@"event_price"];
NSNumber *n = @([cc intValue]);
return n;
}

- (NSNumber *)eventTicketsTotal{
NSString *cc = self[@"event_tickets_total"];
NSNumber *n = @([cc intValue]);
return n;
}

@end

NSDictionary+events_package.h

#import <Foundation/Foundation.h>

@interface NSDictionary (NSDictionary_events_package)

-(NSArray *)upcomingWeather;
@end

NSDictionary+events_package.m

#import "NSDictionary+events_package.h"

@implementation NSDictionary (NSDictionary_events_package)


- (NSArray *)upcomingWeather
{
NSDictionary *dict = self[@"data"];
return dict[@"events"];
}
@end

TDViewController.h

#import <UIKit/UIKit.h>
#import "NSDictionary+events.h"

@interface TDViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property(nonatomic, retain) UITableView *tableView;
@end

TDViewController.m

#import "TDViewController.h"

#import "UIImageView+AFNetworking.h"
#import "TDSecondViewController.h"
#import "NSDictionary+events_package.h"

static NSString * const BaseURLString = @"http://xx.zzz.yy.xx/test/";

@interface TDViewController ()

@property(strong) NSDictionary *events;

@end

@implementation TDViewController

- (void)viewDidLoad
{
[super viewDidLoad];

// 1
NSString *string = [NSString stringWithFormat:@"%@event_json.php?format=json", BaseURLString];
NSLog(@"web service address: %@", string);

NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 2
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

// 3
self.events = (NSDictionary *)responseObject;
NSLog(@"%@", responseObject);
self.title = @"JSON Retrieved";

[self.tableView reloadData];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

// 4
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Events"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}];

// 5
[operation start];

}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"WeatherDetailSegue"]){
UITableViewCell *cell = (UITableViewCell *)sender;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

TDSecondViewController *wac = (TDSecondViewController *)segue.destinationViewController;

NSDictionary *w;
if (indexPath.section == 0) {
{
w = [self.events upcomingWeather][indexPath.row];
//NSLog( @"this is w: %@", w );
}
wac.weatherDictionary = w;

}
}
}


#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(!self.events)
return 0;

NSArray *upcomingWeather = [self.events upcomingWeather];
return [upcomingWeather count];
NSLog( @"the count is %lu", (long)[upcomingWeather count]);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EventCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

NSDictionary *daysWeather = nil;


NSArray *upcomingWeather = [self.events upcomingWeather];
daysWeather = upcomingWeather[indexPath.row];
NSLog( @"this is daysWeather: %@", daysWeather );
cell.textLabel.text = [daysWeather eventTitle];
NSLog(@"The content of arry is%@",daysWeather);

NSURL *url = [NSURL URLWithString:daysWeather.eventImage];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
UIImage *placeholderImage = [UIImage imageNamed:@"placeholder"];

__weak UITableViewCell *weakCell = cell;

[cell.imageView setImageWithURLRequest:request
placeholderImage:placeholderImage
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

weakCell.imageView.image = image;
[weakCell setNeedsLayout];

} failure:nil];
return cell;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
}

@end

下面是我在模拟器上运行项目时得到的 nslog 输出(注意并不是所有的 nslog 语句都显示)。

2014-04-06 21:47:04.592 iCLUB[9198:60b] webservice address:     
http://xx.zzz.yy.xx/test/event_json.php?format=json
2014-04-06 21:47:04.685 iCLUB[9198:60b] {
data = {
events = (
{
"event_date" = "7-5-2014";
"event_id" = 22;
"event_image" = "http://xx.zzz.yy.xx/...";
"event_price" = 150;
"event_tickets_total" = 200;
"event_title" = "New Event Title";
},
{
"event_date" = "3-2-2014";
"event_id" = 23;
"event_image" = "http://xx.zzz.yy.xx/...";
"event_price" = 150;
"event_tickets_total" = 200;
"event_title" = "New Event Title 2";
},
{
"event_date" = "9-25-2014";
"event_id" = 24;
"event_image" = "http://xx.zzz.yy.xx/...";
"event_price" = 150;
"event_tickets_total" = 200;
"event_title" = "New Event Title 33";
}
);
};
}

我只是无法理解问题所在,应用程序在模拟器上构建并运行,但单元格看起来完全是空的。我将不胜感激任何帮助。谢谢,JT。

最佳答案

问题的可能来源包括:

  • 无法连接 TableView 的 IBOutlet。如果 tableView 属性没有正确连接,它将是 nil,因此 [self.tableView reloadData] 不会执行任何操作(因为发送发送给 nil 对象的消息不会执行任何操作)。

    坦率地说,我不清楚这个 tableView 属性是如何设置的,因为它缺少在 Interface Builder 中连接控件时使用的典型 IBOutlet 限定,而我不知道看看你是否以编程方式设置它。

  • 未能将您的 View Controller 指定为 delegate,更重要的是,指定为 TableView 的 dataSource。如果是这种情况,即使您成功调用了 [self.tableView reloadData],也不会导致调用 UITableViewDataSource 方法。

我建议检查 self.tableViewself.tableView.dataSource 是否为非nil

关于ios - AFNetworking 2.0 解析的数据未在 TableView 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22898128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com