NSArray返回NULL?

时间:2015-04-30 19:24:09

标签: ios objective-c

我有一个奇怪的问题。我试图将数组(storageData)设置为与从端点(responseObject)发回的数据相等。我已经记录了responseObject,并且数据存在,但出于某种原因,当我尝试将其设置为storageData时,storageData返回NULL(即使我已经声明storageData在我的块之外使用)。有谁知道为什么会这样?见代码:

·H

@property (strong, nonatomic) NSArray *storageData;

的.m

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

[DIOSNode nodeIndexWithPage:@"0" fields:@"title" parameters:[NSArray arrayWithObjects:@"storage_item", nil] pageSize:@"20" success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Nodes retrieved!");

    self.storageData = responseObject;

    [self.tableView reloadData];
    NSLog(@"%@",storageData);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    //failure
}];

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return 5;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *DoctorsTableIdentifier = @"StorageItemTableViewCell";

    StorageItemTableViewCell *cell = (StorageItemTableViewCell *)[tableView dequeueReusableCellWithIdentifier:DoctorsTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StorageItemTableViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

       NSDictionary *temp = [storageData objectAtIndex:indexPath.row];
       NSString *title = [temp objectForKey:@"title"];
      [[cell itemName] setText:title];

    //  NSLog(@"%@", storageData);

    }
    return cell;
}

2 个答案:

答案 0 :(得分:3)

nodeIndexWithPage:...可能是异步执行的。

它在获取数据之前返回,然后您的表视图方法硬连线到5行,因此,表格尝试填充尚未加载的数据。

numberOfRowsInSection:方法返回[storageData count]

您已在完成块中调用-reloadData,因此表将在成功加载时自动刷新。

您是否也手动声明实例变量?

如果是这样,那么storageData = ...self.storageData =实际上不会设置相同的内容(除非您还覆盖-storageData和-setStorageData:)。

让所有内容通过self.storageData引用它。

您确定只使用了显示数据的类的一个实例吗?

即。将NSLog(@"%p", self);添加到viewDidLoad的开头。希望它只记录一次。它应该只打印一个十六进制数。

NSLog()总是打印一些东西。如果它没有打印任何东西,那么代码就不会被执行。

答案 1 :(得分:0)

您的tableView:numberOfRowsInSection:方法应该返回storageData.count而不是硬编码的5。