Objective c 从匿名处理程序ios分配数据
我试图获取NSArray的引用,该引用在调用SendAsynchNousRequest时被传递。一旦我有了那个NSArray,我想把它分配给一个class属性,但似乎我做不到Objective c 从匿名处理程序ios分配数据,objective-c,ios6,Objective C,Ios6,我试图获取NSArray的引用,该引用在调用SendAsynchNousRequest时被传递。一旦我有了那个NSArray,我想把它分配给一个class属性,但似乎我做不到 @implementation BarTableViewController { NSArray *_jsonArray; } [NSURLConnection sendAsynchronousRequest:request queue:[NS
@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分配给类属性,以便以后使用该数据?忘记简单分配:
@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。我的理论是正确的。在请求完成之前已加载UI。我解决这个问题的方法是打电话
[self.tableView reloadData];
在异步请求内部。显示您的_jsonArray声明您是否声明它弱?您是否可以显示代码,演示如何尝试读取数组并发现它为空?它是空的还是空的?而且,至少从我的经验来看,你的词汇有点独特。它们通常被称为块,而不是匿名处理程序;通常我们称之为实例变量而不是类级别,属性与属性。只是一个友好的提示。我对objective c/ios还不熟悉,所以我的专业术语不适用,对此表示抱歉。我已经更新了问题,并提供了您要求的内容。调用numberOfRowsInSection时,计数始终为零。没问题:)您确定设置它的实例与读取它的实例相同吗?如果尝试“_jsonArray=[NSArray arrayWithArray:jsonArray];”会发生什么相反?嗯,我想我知道问题出在哪里了。我认为UI是在请求完成之前加载的。我想我的问题应该是,如何重新填充视图表?谢谢提示,我的代码现在看起来更干净了。但这并不能解决问题。我认为问题在于,UI是在异步请求完成之前呈现的。如果我用静态数据替换该调用,它将正常工作。不过,我想先弄清楚如何重新填充表视图控制器。