2013-04-22 5 views
1

У меня есть представление, которое нужно ждать, пока данные не будут получены из веб-сервиса, а затем обновите представление подбора пользовательского интерфейса. Пока я жду ответа, если пользователь прокручивает представление выбора, приложение падает, и я получаю lldb-ошибку. Почему?ios: ошибка UIPickerView lldb при попытке прокрутки

Вот мой код:

@interface LocavoreRetroSecondViewController() 

@end 

@implementation LocavoreRetroSecondViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     self.title = NSLocalizedString(@"I Ate Local", @"I Ate Local"); 
     self.tabBarItem.image = [UIImage imageNamed:@"newfood"]; 
     _dataController = [[InSeasonProductDataController alloc] init]; 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return [_dataController countOfList]; 
} 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    Product *product = [_dataController objectInListAtIndex:row]; 
    return product.name; 
} 

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

    //do something 
} 



- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)dealloc{ 
    [_dataController release]; 
    [super dealloc]; 
} 

Я получаю эту ошибку: Ошибка

* Assertion в - [UITableViewRowData rectForRow: надрез:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableViewRowData .m: 1630 (lldb)

+0

Можете ли вы опубликовать сообщение об ошибке? –

+0

Я разместил ошибку выше – wwjdm

ответ

2

Изменен код следующим образом:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

if ([_dataController countOfList]>0) { 
    return [_dataController countOfList]; 
}else{ 
    return 1; 
} 

} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
if ([_dataController countOfList]>0) { 
Product *product = [_dataController objectInListAtIndex:row]; 
return product.name; 
}else{ 
    return @""; 
} 
} 
+0

Это действительно обходной путь. Но намного лучше будет делать сборщик неактивным при отсутствии данных (пустые сборщики). –

Смежные вопросы