reloadData崩溃的iOS应用程序

时间:2012-03-10 02:44:20

标签: objective-c ios uitableview nsurl

我正在通过以下方式对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我的应用程序崩溃。我无法推迟计算。有什么想法吗?

1 个答案:

答案 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];
}
}];