【发布时间】:2012-03-27 11:04:59
【问题描述】:
我正在通过以下方式在 Twitter 上请求 API 数据:
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 我的应用程序崩溃。我不能让它延迟计数。有什么想法吗?
【问题讨论】:
-
你是如何创建表格视图的,你是如何调用 reloadData 的?
-
另外,发布崩溃时遇到的错误很有帮助。
-
听起来您没有保留数据。看到你的 populateTable: 实现会很有用。此外,您需要在声明结果变量时对其进行初始化,或者如果 statusCode 不是 200 则将其设置为 nil。
标签: objective-c ios uitableview nsurl