我正在尝试获取在调用sendAsyncrhonousRequest时传递的NSArray的引用。一旦我有了NSArray,我想将它分配给一个类属性,但似乎我不能这样做。
@implementation BarTableViewController {
NSArray *_jsonArray;
}
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
if (statusCode == 200 && data.length > 0 && error == nil)
{
NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];
if (!jsonArray) {
NSLog(@"Error parsing JSON: %@", e);
} else {
_jsonArray = jsonArray; // this doesn't work? _jsonArray is at the class level
}
}
else if (error)
{
NSLog(@"HTTP Status: %ld", (long)statusCode);
}
else if (statusCode != 200)
{
NSLog(@"HTTP Status: %ld", (long)statusCode);
}
}];
如果我遍历jsonArray,它将正确显示数据。如果我将它分配给_jsonArray以便以后使用它,它将不再返回任何数据。数组的计数为零。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _jsonArray.count; // always returns zero
}
如何将jsonArray分配给类属性,以便以后可以使用该数据?
答案 0 :(得分:1)
我的理论是正确的。 UI在请求完成之前加载。我为解决这个问题所做的就是致电
[self.tableView reloadData];
在异步请求中。
答案 1 :(得分:0)
忘记简单的任务:
@implementation BarTableViewController {
// NSArray *_jsonArray; forget it
}
而是拥有该对象。
@interface BarTableViewController()
@property(nonatomic, strong)NSArray *jsonArray;
@end
/* --------- */
@implementation BarTableViewController
@syntethise jsonArray = _jsonArray;
@end
然后让它拥有它
self.jsonArray = jsonArray; // will call synthesized setter
我假设您正在使用ARC,因为您获得的是nil值而不是悬空指针。现在你将得到一个有效的jsonArray。