【问题标题】:reloadData Crashing iOS AppreloadData 崩溃 iOS 应用程序
【发布时间】: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


【解决方案1】:

在.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];
}
}];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2015-08-13
    • 2013-07-07
    • 2016-09-22
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多