我正在通过以下方式对API数据进行Twitter请求:
TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://search.twitter.com/search.json?q=a2zwedding&include_entities=true"] parameters:nil requestMethod:TWRequestMethodGET];
然后我得到所有处理请求:
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
// NSString *output;
NSArray *results;
if ([urlResponse statusCode] == 200) {
NSError *jsonParsingError = nil;
NSDictionary *publicTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];
results = [publicTimeline objectForKey:@"results"];
}
[self performSelectorOnMainThread:@selector(populateTable:) withObject:results waitUntilDone:YES];
}];
然后我尝试在UITableView中显示“结果”。我的委托和数据源是处理JSON数据的相同视图控制器。我的数据源方法:
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
如果我尝试对我的数组进行计数,返回零,因为调用它时我的JSON解析没有完成。如果我使用此方法“返回1”,它会正确显示我的Twitter请求中的一个结果。但是,如果我使用reloadData我的应用程序崩溃。我无法推迟计算。有什么想法吗?
答案 0 :(得分:0)
in .h
//use this as your datasource
@property(nonatomic, strong)NSArray *myResultData;
的.m
@synthesize myResultData;
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
// NSString *output;
NSArray *results;
if ([urlResponse statusCode] == 200) {
NSError *jsonParsingError = nil;
NSDictionary *publicTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];
results = [publicTimeline objectForKey:@"results"];
if(![results isKindOfClass:[NSNull class]])
{
myResultData = [NSArray alloc]initWithArray:results];
}
[self.tableView reloadData];
}
}];