Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从匿名处理程序ios分配数据_Objective C_Ios6 - Fatal编程技术网

Objective c 从匿名处理程序ios分配数据

Objective c 从匿名处理程序ios分配数据,objective-c,ios6,Objective C,Ios6,我试图获取NSArray的引用,该引用在调用SendAsynchNousRequest时被传递。一旦我有了那个NSArray,我想把它分配给一个class属性,但似乎我做不到 @implementation BarTableViewController { NSArray *_jsonArray; } [NSURLConnection sendAsynchronousRequest:request queue:[NS

我试图获取NSArray的引用,该引用在调用SendAsynchNousRequest时被传递。一旦我有了那个NSArray,我想把它分配给一个class属性,但似乎我做不到

@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是在异步请求完成之前呈现的。如果我用静态数据替换该调用,它将正常工作。不过,我想先弄清楚如何重新填充表视图控制器。