IOS Загрузка данных в таблицу из веб-службы - PullRequest
0 голосов
/ 14 марта 2012

Я очень новичок в этом, так что извините за мое невежество.

У меня есть следующий метод, который я собрал воедино, и я не получаю ошибок, когда он работает, и я проверил, что я получаю данные из веб-службы. Что я замечаю, так это то, что когда я ставлю точку останова на метод numberOfRowsInSection, он возвращает 0 оба раза. Я предполагаю, что это означает, что я не загружаю свой массив правильно.

Объявление свойства моих сообщений в заголовке

@property (nonatomic, strong) NSArray *messages; 

Синтезируйте это свойство в файле m

@synthesize messages;

Это метод, который загружает данные и должен перезагрузить таблицу

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response 
{   
    if ([response isOK]) 
    {  
        // Success! Let's take a look at the data
        NSDictionary *result = [NSJSONSerialization JSONObjectWithData: [[response bodyAsString] dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error:nil];

        if([[result objectForKey:@"result"] isEqualToString:@"success"])
        {
            NSArray *message_array = [result objectForKey:@"messages"];

            for(NSUInteger i = 0; i < [message_array count]; i++)
            {
                EHRXMessage *m = [[EHRXMessage alloc] init];
                NSDictionary *message = [message_array objectAtIndex: i];
                m.subject = [message objectForKey:@"Title"];
                m.callback_name = [message objectForKey:@"CallbackName"];

                [self.messages setValue:m forKey:[NSNumber numberWithInt:i]];
            }


            [self.tableView reloadData];
        }
        else
        {
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Inbox Error!"
                                                            message:@"Error loading messages"
                                                           delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        }

    } 
}

А вот метод, в котором я рассказываю, как загрузить ячейки

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MessageCell"];
    EHRXMessage *message = [self.messages objectAtIndex:indexPath.row];

    cell.textLabel.text = message.callback_name;
    cell.detailTextLabel.text = message.subject;
    return cell;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.messages count];
}

А вот фрагмент того, как выглядит json

{"result":"success","count":"0", "messages":[{"SenderID":"6fcb7c19-b21f-4640-a237-0e7ac5ca0ce8","Title":"General","Message":"","CallbackName":"Claudia","CallbackNumber":"1295","EncounterID":null,"AdmissionID":"d7387243-3e8a-42e4-8a85-fdd3428dae68","DateSent":"3/9/2012 12:52 PM"}]}

Ответы [ 2 ]

1 голос
/ 14 марта 2012
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.loaded = FALSE;

    NSURL *URL = [NSURL URLWithString:@"http://46.136.168.166:8000/test.php"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];

    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connection start];

    // creating loading indicator
    self.HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];

    if(connection){
        self.recievedData = [NSMutableData data];
    }
}


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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if(!cell)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

    NSDictionary *item = [self.dataBase objectAtIndex:[indexPath section]];

    NSArray *item_d = [item allKeys];
    [[cell textLabel] setText:[item objectForKey:[item_d objectAtIndex:[indexPath row]]]];
    return cell;
}
- (void)fetchedData:(NSMutableData *)responseData
{
    NSError *error;    
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
    [self setDataBase:[json objectForKey:@"json-data-header"]];
    [self.table reloadData];
}
0 голосов
/ 14 марта 2012

У вас есть numberOfRowsInSection?

РЕДАКТИРОВАТЬ

Обязательно инициализируйте источник данных (self.messages)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...