Последние два дня я был повсюду, пытаясь найти ответ на этот вопрос, но, похоже, не могу его получить. Насколько я могу судить, у меня все настроено правильно, но оно просто не хочет работать.
Мое приложение сканирует теги QRCode и сохраняет их в изменяемый массив. Мне нужно создать способ, чтобы пользователь мог удалить некоторые объекты тегов из массива, поэтому я использую UIPickerView для отображения списка номеров тегов, из которых можно выбрать теги для удаления.
Вот что у меня есть:
в файле .h
@interface ViewController : UIViewController
UIPickerView *tagPickerView;
NSMutableArray *tagPickerData;
@property (nonatomic, retain) IBOutlet UIPickerView *tagPickerView;
@property (nonatomic, retain) NSMutableArray *tagPickerData;
в файле .m
@synthesize tagPickerView;
@synthesize tagPickerData;
-(void) viewDidLoad{
tagPickerData = [[NSMutableArray alloc]init];
[tagPickerView setDelegate:self];
[tagPickerView setDataSource:self];
}
- (void) dealloc{
[tagPickerView release];
[tagPickerData release];
[super dealloc];
}
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
[tagPickerData addObject:tagString]; //tagString is the value returned from the QRCode reader
}
#pragma mark -
#pragma mark tagPickerView Data Source Methods
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)tagPickerView{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)tagPickerView
numberOfRowsInComponent:(NSInteger)component{
return [tagPickerData count];
}
#pragma mark tagPickerView Delegate Methods
-(NSString *)pickerView:(UIPickerView *)tagPickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component{
return [self.tagPickerData objectAtIndex:row];
}
(Я думаю, это все.)
В IB у меня есть dataSource, делегат и tagPickerView для владельца файла. UIPickerView скрыт до тех пор, пока не будет вызвана команда удаления (в этом случае встряхивание телефона), а затем он появляется поверх всего.
То, что я получаю, это пустой вид сборщика.
Я могу проверить с помощью NSLog, что массив заполняется каждый раз, когда выполняется сканирование, поэтому я знаю, что это не так, что я загружаю пустой массив. Я также могу проверить, что методы источника данных, по-видимому, читаются, потому что я могу изменить количество компонентов на 2, и это отражается, когда поднимается сборщик - два вращающихся колеса. Но я не знаю, как проверить, работает ли метод Delegate.
Я задавался вопросом, есть ли способ заполнить сборщик по команде, например, когда телефон встряхивается, вместо использования делегата ... или это вообще сработает?
Проблема со всеми справочными материалами заключается в том, что он демонстрирует, как использовать массив, который инициализируется объектами, т.е.
NSArray *array = [[NSArray alloc] initWithObjects:@"String 1",@"string 2",@string 3",(etc.) ,nil];
Но я не могу найти ничего, что показывает, как загрузить средство выбора из массива, созданного из информации, собранной пользователем. Здравый смысл подсказывает мне, что он должен работать так же, но я научился отказываться от здравого смысла при работе с Objective-C.
Есть ли эксперт по UIPickerView, который может мне помочь?
Спасибо