当我的应用用户注册一个帐户时,tableView会以空白开头(因为用户没有添加任何数据)。当即将填充的数组为空时,如何阻止应用程序崩溃?到目前为止,我已经尝试在表/数组为空时显示视图,但崩溃仍然发生......
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.storageData count];
}
- (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];
}
if (self.storageData > 0) {
noitemsView.hidden = YES;
NSDictionary *tmp = [self.storageData objectForKey:[NSString stringWithFormat:@"%d",(long)indexPath.row]];
[[cell itemName] setText:(NSString *)[tmp objectForKey:@"title"]];
NSString *title = [tmp objectForKey:@"title"];
[[cell itemName] setText:title];
NSDictionary *node = [self.descripData objectAtIndex:indexPath.row];
[[cell itemDescrip] setText:[node objectForKey:@"body"]];
NSLog(@"%@", self.descripData);
NSString *secondLink = [[self.descripData objectAtIndex:indexPath.row] objectForKey:@"photo"];
[cell.itemPhoto sd_setImageWithURL:[NSURL URLWithString:secondLink]];
NSLog(@"%@",secondLink);
}
else {
noitemsView.hidden = NO;
}
return cell;
}
答案 0 :(得分:1)
您需要更新numberOfRows Delegate方法
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([self.storageData count] > 0 && self.descripData.count>0)
{
return [self.storageData count];
}
else
return 1;
}
同时修改下面的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
----------
if (self.storageData.count > 0 && self.descripData.count>0) {
------------//Instead of self.storageData>0
}
----------
}
如果storageData为空,它会解决崩溃问题..!
答案 1 :(得分:0)
这不是真的正确,但由于你的问题是关于使应用程序不崩溃,你可以这样做:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (self.storageData)
return [self.storageData count];
else
return 1;
}
这意味着如果数组不为空,则显示数组中的元素数。否则,只显示1(或任何你想要的默认号码)。
此外,在cellForRowAtIndexPath中,您需要进行相同的检查:
- (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];
}
if (self.storageData) // <-- check for nil values first
{ if (self.storageData > 0) {
//more code
}
同样,不好或不正确,但这会让应用程序崩溃,这就是你所要求的。
答案 2 :(得分:0)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//If "numberOfRowsInSection" return '0' or nil, "cellForRowAtIndexPath" should not be called.
//Are you sure the "self.storageData.count" is empty?
if (_storageData == nil)
{
return 0;
}
else
{
return _storageData.count;
}
}
答案 3 :(得分:0)
这是一个问题:
if (self.storageData > 0) {
noitemsView.hidden = YES;
....
您正在比较self.storageData&gt; 0而不是[self.storageData count]&gt; 0,所以if总是评估为true,并且它总是试图用不可用的数据创建一个单元格。
答案 4 :(得分:0)
请尝试以下操作。
self.tableView.dataSource = self.storageData ? self : nil;
答案 5 :(得分:0)
在视图中编写代码加载
self.storageData = [[NSMutableArray alloc] init];
答案 6 :(得分:-1)
您需要在section方法中检查行数中的数组计数: 1.
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(!myArray.count)
return 0;
return [myArray.count];
}