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

Другие вопросы по тегам