0

我正在尝试获取调用 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 分配给类属性,以便以后可以使用该数据?

4

2 回答 2

1

我的理论是正确的。UI 在请求完成之前正在加载。我为解决这个问题所做的就是打电话

[self.tableView reloadData];

在异步请求中。

于 2013-03-23T04:18:47.013 回答
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。

于 2013-03-22T08:10:41.677 回答