2015-08-22 3 views
-1

Привет, новичок в использовании Parse и пытаюсь загрузить простой контроллер табличного представления с данными из массива, полученного с помощью Parse PFQuery. Хотя я могу nslog, массив «категорий» в поле зрения загружал, к моменту, когда код достигает numberOfRowsInSection, массив, кажется, был сброшен на нуль. Любая помощь с этим будет принята с благодарностью. Btw Я попробовал эту загрузку кода в массив с литералами и без проблем отображал таблицу. Heres код:Создание простого табличного представления с использованием Parse PFQuery

@implementation DisplayCategoriesTVC 

NSArray *categories; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // CODE TO RETRIEVE CONTENTS OF THE PARSE CATEGORIES CLASS 

    PFQuery *query = [PFQuery queryWithClassName:@"Categories"]; 
    // [query whereKey:@"Sequence" > @1]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *categories, NSError *error) { 
     if (!error) { 
      // The find succeeded. 
      NSLog(@"Successfully retrieved %lu categories.", (unsigned long)categories.count); 
     } else { 
      // Log details of the failure 
      NSLog(@"Error: %@ %@", error, [error userInfo]); 
     } 
    }]; 


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

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

specfic У меня есть вопрос, почему в numberOfRowsInSection является категорией массива показывает нулевую ценность?

Конкретный вопрос: почему массив категорий теперь показывает nil и что я могу сделать, чтобы сохранить значения, которые были загружены PFQuery, и использовать их в других моих методах?

ответ

1

Вы выполняете что-то на фоне резьбы:

findObjectsInBackground: 

Что это значит, так как вы новичок?

What's the difference between synchronous and asynchronous calls in Objective-C, versus multi-threading?

Так как же вы reload the tableView, когда ваши данные, наконец, делает агрегат от фоновой задачи?

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

[self.tableView reloadData]; 

Для получения дополнительной информации см:

iPhone - Grand Central Dispatch main thread

Так полностью :

PFQuery *query = [PFQuery queryWithClassName:@"Categories"]; 
// [query whereKey:@"Sequence" > @1]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) { 
     // The find succeeded. 
     NSLog(@"Successfully retrieved %lu categories.", (unsigned long)categories.count); 
     self.categories = objects; 
     //Since this is a UI update we need to perform this on the main thread: 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.tableView reloadData]; 
     }); 
    } else { 
     // Log details of the failure 
     NSLog(@"Error: %@ %@", error, [error userInfo]); 
    } 
}]; 

Ваш запрос выполнил свою задачу bef ваш пользовательский интерфейс обновляется, потому что это происходит в фоновом потоке, поэтому вам нужно сообщить свои компоненты пользовательского интерфейса, когда это будет сделано.

 Смежные вопросы

  • Нет связанных вопросов^_^