Почему мой UITableViewController не заполняется здесь? - PullRequest
0 голосов
/ 20 сентября 2011

Просто попытка понять, что моя таблица не заполняется, когда появляется мой контроллер вида.Я использую AIHTTPRequest для связи с REST API.Вызов возвращает массив ассоциативных массивов (который, как я предполагаю, мне придется привести к NSArray из NSDictionaries).

В заголовке моего TableViewController:

@interface MyTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    NSArray *homepageItems;
}

@property (nonatomic, retain) NSArray * homepageItems;

Вреализация:

@synthesize homepageItems;
....
- (void)viewDidLoad {

NSURL *url = [NSURL URLWithString:URL_TO_MY_API];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];

Когда возвращаются данные:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];
    homepageItems = (NSArray *)response;
}

И в методе табличного представления:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
    }

    NSDictionary *dataItem = [homepageItems objectAtIndex:indexPath.row];

    // Configure the cell...
    cell.textLabel.text = [dataItem objectForKey:@"message"];

    return cell;
}

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

Спасибо,

EDIT: В моем методе requestFinished я проверил объект homepageItems, выполнивследующее:

for(NSDictionary *dictionary in homepageMMDs) {
    NSLog(@"%@", [dictionary objectForKey:@"message"]);
}

И правильные сообщения от моей службы API регистрируются.

Ответы [ 5 ]

2 голосов
/ 20 сентября 2011

Вам необходимо сохранить домашнюю страницуТовары

 self.homepageItems = (NSArray *)response;

А также перезагрузите таблицу, как сказал Джо

2 голосов
/ 20 сентября 2011

Попробуйте перезагрузить данные!

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];

    //Use self. to properly retain and you do not need to cast id assignments
    self.homepageItems = response; 

    //Make sure you reload the data!!
    [self.tableView reloadData];
}
1 голос
/ 20 сентября 2011

Вы не сохраняете загруженные данные:

Вместо:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data.
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];
    homepageItems = (NSArray *)response;
}

Вам нужно сделать: (крайне важно использовать self перед homepageItems)

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data.
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];
    self.homepageItems = (NSArray *)response; 
    // and others have said you need to reload the tableView
    [self.tableView reloadData];
}
0 голосов
/ 19 июня 2015

Вы можете использовать этот cocoapod https://github.com/xmartlabs/XLData для извлечения данных из конечной точки API и заполнения UITableView / UICollectionView.

0 голосов
/ 20 сентября 2011

Я предлагаю вам создать страницу php, которая отображает ваши строки API, прежде чем вы сможете проанализировать элементы и импортировать их туда, куда вам нужно, это намного проще! Что касается вашего кода, я полагаю, вам нужно проанализировать элемент, так как вы можете посмотреть здесь: http://www.ibm.com/developerworks/library/x-ioschat/. Лаки.

...