iOS-приложение, которое возвращает указанные типы UPnP-устройств в ячейке табличного представления
Я являюсь посредником в Objective-C, и я пытаюсь сделать так, чтобы это приложение вернуло устройства UPnP определенного типа, которые могут быть найдены в локальной сети. Я использую библиотеку UPnP, и вот мой код: В viewDidLoad он инициализирует массив mDevice с найденными объектами UPnP.
- (void)viewDidLoad
{
[super viewDidLoad];
UPnPDB* db = [[UPnPManager GetInstance] DB];
self.mDevices = [db rootDevices]; //BasicUPnPDevice
[db addObserver:(UPnPDBObserver*)self];
//Optional; set User Agent
//[[[UPnPManager GetInstance] SSDP] setUserAgentProduct:@"upnpxdemo/1.0" andOS:@"OSX"];
//Search for UPnP Devices
[[[UPnPManager GetInstance] SSDP] searchSSDP];
}
Количество секций всего один
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
И здесь я считаю, что есть моя проблема. Я не могу вернуть только тот тип устройства, который мне нужен. Он возвращает количество строк всех найденных устройств, я хочу вернуть только для указанных устройств, ведь это BinaryLightDevice, и я получаю эту информацию из XML в следующем втором коде.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [mDevices count];
}
Этот код предназначен для настройки внешнего вида ячеек табличного представления.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
BasicUPnPDevice *device = [self.mDevices objectAtIndex:indexPath.row];
[[cell textLabel] setText:[device friendlyName]];
if([[device urn] isEqualToString:@"urn:schemas-upnp org:device:lightswitch:1"])
{
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
Я хочу, чтобы ячейка возвращала только название устройств переключения света, спасибо!
EDIT:
Здравствуйте, я задал вопрос, но здесь сложно. Я упомянул следующее: как вернуть объект, хранящийся в одной строке, в другой объект, созданный ранее? Но я хочу сделать это до объявления ячеек табличного представления. Пример:
BasicUPnPDevice *device = [self.mDevices objectAtIndex:indexPath.row];
Здесь *device
получает объект в строке. Я хочу создать еще один массив для хранения отфильтрованных устройств, поэтому я могу установить количество строк по этому новому массиву, а не по массиву, который содержит все найденные устройства.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [newArray count];
}
1 ответ
Когда вы добавляете устройства в свой массив mDevices, именно здесь вы будете фильтровать массив или создавать новый массив только тех устройств, которые вы хотите отобразить в виде таблицы. затем в методах tableview для подсчета строк (numberOfRowsInSection) и для представления данных tableview (cellForRowAtIndexPath) вы бы ссылались на объекты в фильтрованном массиве. если обработка асинхронная и данные недоступны при первом отображении таблицы, обновите массив, когда данные будут доступны, и вызовите метод для перезагрузки данных таблицы, чтобы отобразить самые последние данные. [self.tableView reloadData]; вызов этого метода приведет к тому, что tableview снова выполнит вызовы numberOfRowsInSection и cellForRowAtIndexPath для доступа к вашему фильтрованному массиву. -rrh