Получить массив из запроса Parse

Я использую Parse для создания этого табличного представления и пытаюсь понять, как получить данные таблицы Parse в массив, чтобы я мог передать их в WatchKit InterfaceController, чтобы показать то же самое?

Поэтому я хочу показать в интерфейсе WatchKit именно то, что отображается в интерфейсе iPhone.

Вот что у меня есть, дайте мне знать, если я могу добавить что-нибудь полезное:

TableVC.m:

- (id)initWithCoder:(NSCoder *)aCoder
{
    self = [super initWithCoder:aCoder];
    if (self) {
        self.parseClassName = @"na";
        self.textKey = @"dateTime";
        self.pullToRefreshEnabled = YES;
        self.paginationEnabled = NO;
    }
    return self;
}
- (PFQuery *)queryForTable
{
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];

    return query;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
{
    static NSString *simpleTableIdentifier = @"RecipeCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    UILabel *homeLabel = (UILabel*) [cell viewWithTag:101];
    homeLabel.text = [object objectForKey:@"test"];

    UILabel *dateLabel = (UILabel*) [cell viewWithTag:102];
    dateLabel.text = [object objectForKey:@"dateTime"];

    return cell;
}

Parse data:

введите здесь описание изображения

TableVC.m:

введите здесь описание изображения

У меня уже есть основные WatchKit файлы и раскадровка. Я жестко закодировал массив, чтобы проверить, что он в целом работает. Но теперь мне просто нужно получить данные из Parse туда, и я не уверен, нужно ли мне делать запрос, а затем превращать его в общедоступный array?

ИЗМЕНИТЬ:

Вот мой запрос:

PFQuery *query2 = [PFQuery queryWithClassName:@"nba"];
[query2 findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        // The find succeeded.
        NSLog(@"Objects 2: %@", objects);
        }
    } else {
        // Log details of the failure
        NSLog(@"Error 2: %@ %@", error, [error userInfo]);
    }
}];

Вот мой NSLog:

NSLog(@"Objects 2: %@", objects);

Приставка:

2015-02-09 21:06:30.845 SimpleTable[8373:1284663] Objects 2: (
    "<na: 0x7ff3f8e40880, objectId: cOrjeAmwJh, localId: (null)> {\n    away = Cav;\n    date = \"04/19/2015\";\n    dateTime = \"April 19, 2015, 16:00\";\n    gNumber = 1;\n    home = Bul;\n    matup = \"Ca\";\n    ro = \"Ro \";\n    test = \"Test 2\";\n    tv = T;\n}",

person SRMR    schedule 09.02.2015    source источник


Ответы (2)


Если вам нужен массив, извлеките его асинхронно в методе вне метода queryForTable, получите его следующим образом:

PFQuery *query = [self queryForTable];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        // objects is the array for this table
        NSMutableArray *array = [@[] mutableCopy];
        for (PFObject *object in objects) {
            NSLog(@"we got an object with dateTime = %@", [object objectForKey:@"dateTime"]);
            [array addObject:[object objectForKey:@"dateTime"]];
            // you can prove this with any of your keys: away, number, home, mat up, etc.
        }
    }
}];
person danh    schedule 09.02.2015
comment
Спасибо за ответ, это то, что я пытался. Они заложили основу для чего-то подобного в документации, но я не смог понять, что входит в часть // objects is the array for this table. Когда я использую NSLog для регистрации, я, кажется, просто получаю указатели, а не обязательно массив. Я разместил код выше в конце моего исходного вопроса. Любые идеи? - person SRMR; 10.02.2015
comment
Это похоже на правильный ответ от синтаксического анализа, если вы читаете тарабарщину, вы можете увидеть пары ключ-значение для таких ключей, как dateTime, away, gNumber, mat up и т. д. см. редактирование кода, чтобы доказать, что у вас есть массив pfobjects. - person danh; 10.02.2015
comment
Верно, у меня было что-то вроде этого, и я тоже попробовал эту версию, но я был сбит с толку, потому что казалось, что он просто перебирает его и выплевывает все отдельные объекты (как вы можете видеть в вашем коде это NSLogs один dateTime за время верно?), вместо того, чтобы дать мне array. Вы знаете, как получить array из dateTime? Например, есть ли строка или две кода, которые вы бы добавили к тому, что у вас уже есть, чтобы превратить все эти dateTime в array? Спасибо! Я почти на месте! - person SRMR; 11.02.2015
comment
@SRMR, см. редактирование. массив будет инициализирован со всеми датами. - person danh; 11.02.2015
comment
Потрясающий. И тогда мне нужно сделать этот массив общедоступным, чтобы WatchKit InterfaceController.m могли получить к нему доступ? - person SRMR; 11.02.2015
comment
Да. Свойство класса, в котором находится этот код. - person danh; 11.02.2015
comment
Думаю, я до сих пор не уверен, как это работает: на стороне iPhone есть TableVC, где я запускаю запрос Parse, а затем на стороне WatchKit есть InterfaceController с кодом, и я создал класс MyRowController, который содержит выход метки для строк. Обычно я проходил его через переход или что-то в этом роде. В этом случае InterfaceController находится там, где находится код, поэтому, если я делаю @property (nonatomic, weak) NSArray *interfaceArray; в InterfaceController.h, то я не уверен, как interfaceArray становится массивом из запроса Parse, если ему ничего не передается? - person SRMR; 12.02.2015
comment
По комментариям сложно понять организацию вашего проекта, а я не пользовался часовым комплектом. Но, несомненно, концепции одинаковы: табличное представление всегда поддерживается массивом. Представление таблицы имеет источник данных, который является классом, который содержит этот массив как свойство (чаще всего этот источник данных также является контроллером представления, у которого есть таблица в иерархии представления). - person danh; 12.02.2015
comment
В каком-то классе, возможно, в источнике данных, а может и в другом, мы вызываем синтаксический анализ и получаем массив объектов синтаксического анализа, соответствующих строкам в таблице. Когда поиск завершается, мы присваиваем этому свойству массива полученные объекты и сообщаем таблице о необходимости перезагрузки. Если извлекающий контроллер представления не является контроллером представления с таблицей, то мы переходим к нему, устанавливая данные массива на подготовку к переходу. - person danh; 12.02.2015

если вы просто хотите передать объекты в массив, вы можете сделать это так или как вариант:

- (PFQuery *)queryForTable
{
PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];

    self.someArray = [query findObjects];

return query;
}

ССЫЛКА

person soulshined    schedule 09.02.2015
comment
Я думаю, что это очень плохая идея. Что вы сделали, так это заставили этот запрос запускаться синхронно всякий раз, когда суперкласс PFQueryTableVC вызывает метод queryForTable, а это неизвестно когда. - person danh; 09.02.2015