我有一个奇怪的问题。我试图将数组(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;
}
答案 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。