Как получить только один столбец из Parse PFQuery. selectKeys не работает

У меня есть список телепрограмм в классе Parse под названием «Программы». Каждая программа имеет поля:

-programTitle

-программаОписание

-airsOn (это сеть, в которой он транслируется)

Я пытаюсь отобразить список всех «programTitle» в табличном представлении, чтобы пользователь мог выбрать программу, которую он хочет просмотреть. Однако, когда я запускаю приведенный ниже код, чтобы выбрать только столбец «programTitle», я получаю обратно 3 столбца данных. «ProgramTitle», а также «localId» и «objectId».

Как я могу загрузить только список «programTitle» из класса Parse и отобразить их в табличном представлении?

Мой код и вывод ниже. Вы увидите, что у меня есть свойство под названием «programList» в заголовочном файле. Я помещаю результат запроса из моего viewDidLoad в свойство «programList», а затем распечатываю его с помощью NSLog. Как видно из вывода, терпит неудачу. Документация по разбору меня больше смутила. Пожалуйста помоги.

Header File:
#import <UIKit/UIKit.h>
#import <Parse/Parse.h>

@interface ProgramsTableViewController : UITableViewController
@property(nonatomic,strong) NSArray *programList;
@property(nonatomic) NSString *selectedProgram;

@end

viewDidLoad в файле реализации:

- (void)viewDidLoad {
    [super viewDidLoad];

    PFQuery *query = [PFQuery queryWithClassName:@"Programs"];
    [query selectKeys:@[@"programTitle"]];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            self.programList = objects;
            NSLog(@"%@",self.programList);
        } else {
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];
}

Выход:

2015-05-03 13:59:35.233 Oingo[27838:1802357] (
    "<Programs: 0x7f94a3c608a0, objectId: ukcFRmDsb1, localId: (null)> {\n    programTitle = \"Silicon Valley\";\n}",
    "<Programs: 0x7f94a3c609b0, objectId: JvW9oAYlo8, localId: (null)> {\n    programTitle = \"Broad City\";\n}",
    "<Programs: 0x7f94a3c80920, objectId: n1LJE3YWoP, localId: (null)> {\n    programTitle = \"Mindy Project\";\n}"

Методы tableView, которые не работают:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    // Return the number of rows in the section.
    return [self.programList count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    // Configure the cell...
    cell.textLabel.text = [self.programList objectAtIndex:indexPath.row];
    return cell;
}

person Boingoloid    schedule 03.05.2015    source источник


Ответы (1)


Вы можете отфильтровать полученный список, чтобы извлечь заголовки:

self.programList = [objects valueForKey:@"programTitle"]

или вы можете сохранить объекты, которые у вас есть в массиве, и вывести заголовок для отображения:

cell.textLabel.text = [[self.programList objectAtIndex:indexPath.row] objectForKey:@"programTitle"];

или вы можете написать функцию облачного кода, чтобы получить список, а затем вернуть только список заголовков.

person Wain    schedule 03.05.2015
comment
Спасибо! это сработало. У меня была дополнительная проблема с асинхронностью. Я не мог заставить self.programList обновить мой tableView. Затем я понял, что мне нужно перезагрузить tableView с помощью [self.tableView reloadData]; внутри блока в конце, так что это происходит после выполнения асинхронной задачи. Еще раз спасибо за помощь @Wain - person Boingoloid; 05.05.2015