2013-10-25 3 views
-2

Я разбираю идентификатор продукта через JSON, который затем переводится в подробный вид и помещается в URL-адрес для разбора более подробной информации о выбранном продукте, но похоже, что didSelectRowAtIndexPath возвращает неправильную индексную таблицу, потому что каждый раз, когда я нажимаю строка не загружает продукт для подробного представления, получает идентификатор продукта строки, которая была восстановлена ​​последним.Неверный indexPath для didSelectRowAtIndex

Например, у меня есть 5 строк. Моя логика правильно анализирует все идентификаторы для каждой строки (строка 1, строка 2, строка 3, строка 4, строка 5). Я знаю, что попал в первую строку, потому что я хочу получить информацию, связанную с строкой 1, но вместо информации первой строки подробное представление получает команду для анализа информации для строки 5, потому что это последний идентификатор, который был разобран, а затем отображает неправильная информация.

Я не знаю, как сделать метод didSelectRowAtIndexPath получить правильную информацию для правильной строки.

Вот мой код для didSelectRowAtIndexPath:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIStoryboard *iPhone = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
    CJArtikelDetailViewController *artikelView = [iPhone instantiateViewControllerWithIdentifier:@"detail"]; 

    NSString *detail = [NSString stringWithFormat:@"%@", wareID]; 

    artikelView.productID = detail; 

    [self.navigationController pushViewController:artikelView animated:YES]; 
    [neuheitenTableView deselectRowAtIndexPath:indexPath animated:YES]; 
    NSLog(@"IndexPath: %@", [indexPath description]); 
} 



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *neuheitenCell = @"neuheitenCell"; 
    CJHomeTableCell *cell = [tableView dequeueReusableCellWithIdentifier:neuheitenCell]; 

    /* 
    NSNumber *preis = [[arrayArtikelPreis objectAtIndex:indexPath.row] objectForKey:@"preis"]; 
    NSMutableString *test = [NSMutableString stringWithFormat:@"€ %@", preis]; 
    cell.artikelPreis.text = test; 
     */ 

    NSString *imageString = [[arrayNeuheiten objectAtIndex:indexPath.row] objectForKey:@"bild"]; 
    //NSLog(@"BildURL: %@", imageString); 
    NSURL *imageURL = [NSURL URLWithString:imageString]; 
    [cell.artikelImage setImageWithURL:imageURL placeholderImage:[UIImage imageNamed:@""]]; 

    NSDictionary *object = [arrayNeuheiten objectAtIndex:indexPath.row]; 
    //NSLog(@"%@", object); 

    wareID = [object objectForKey:@"ware_id"]; 
    NSLog(@"Waren ID: %@", wareID); 

    cell.artikelName.text = [object objectForKey:@"name"]; 
    cell.artikelHersteller.text = [object objectForKey:@"lieferant_name"]; 


    return cell; 

} 

Я должен сделать метод как-то определить, какая строка была выбрана, но я не знаю, как и не может найти информацию об этом в документации.

Заранее благодарим за любую помощь!

+0

indexPath.row не работают для вас? –

+0

indexPath.row где? –

+0

Что такое wareId здесь? можете ли вы опубликовать код, в котором вы присваиваете значение wareId –

ответ

1

Надеется, что это помогает

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIStoryboard *iPhone = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
    CJArtikelDetailViewController *artikelView = [iPhone instantiateViewControllerWithIdentifier:@"detail"]; 
    NSDictionary *object = [arrayNeuheiten objectAtIndex:indexPath.row]; 
    //NSLog(@"%@", object); 
    //assign selected product id to wareId here and pass it to detail view controller it will work 
    wareID = [object objectForKey:@"ware_id"]; 
    NSLog(@"Waren ID: %@", wareID); 
    NSString *detail = [NSString stringWithFormat:@"%@", wareID]; 

    artikelView.productID = detail; 

    [self.navigationController pushViewController:artikelView animated:YES]; 
    [neuheitenTableView deselectRowAtIndexPath:indexPath animated:YES]; 
    NSLog(@"IndexPath: %@", [indexPath description]); 
} 



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *neuheitenCell = @"neuheitenCell"; 
    CJHomeTableCell *cell = [tableView dequeueReusableCellWithIdentifier:neuheitenCell]; 

    /* 
    NSNumber *preis = [[arrayArtikelPreis objectAtIndex:indexPath.row] objectForKey:@"preis"]; 
    NSMutableString *test = [NSMutableString stringWithFormat:@"€ %@", preis]; 
    cell.artikelPreis.text = test; 
    */ 

    NSString *imageString = [[arrayNeuheiten objectAtIndex:indexPath.row] objectForKey:@"bild"]; 
    //NSLog(@"BildURL: %@", imageString); 
    NSURL *imageURL = [NSURL URLWithString:imageString]; 
    [cell.artikelImage setImageWithURL:imageURL placeholderImage:[UIImage imageNamed:@""]]; 

    //comment out wareId value assigning code here 
    NSDictionary *object = [arrayNeuheiten objectAtIndex:indexPath.row];//commemted this line by mistake 
    //NSLog(@"%@", object); 

    //wareID = [object objectForKey:@"ware_id"]; 
    //NSLog(@"Waren ID: %@", wareID); 

    cell.artikelName.text = [object objectForKey:@"name"]; 
    cell.artikelHersteller.text = [object objectForKey:@"lieferant_name"]; 


    return cell; 

} 
+0

Я сделал это несколько иначе. Я добавил второй NSDictionary, потому что мне нужен объект для cell.artikelName.text и cell.artikelHersteller.text дальше. Пожалуйста, отредактируйте свой код для других. Я не хочу этого делать :) Еще раз спасибо! –

+0

'NSDictionary * object = [arrayNeuheiten objectAtIndex: indexPath.row];' прокомментировал эту строку по ошибке. Теперь она отправлена ​​на проверку –

+0

Да. Код отлично работает для меня! –

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