iCarousel + UITableView = cellForRowAtIndexPath indexPath всегда пусто

У меня проблема, которая причиняет мне сильную головную боль. Когда я звоню:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath`

Я получил всегда indexPath=null со следующей ошибкой.

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Categories copyWithZone:]: unrecognized selector sent to instance 0xc386b20'

У меня есть этот код в моем GallerySpirituosenViewController.h:

@interface GallerySpirituosenViewController :  UIViewController <iCarouselDataSource, iCarouselDelegate , UITableViewDelegate, UITableViewDataSource>
  @property (weak, nonatomic) IBOutlet UITableView    *table_categories;
  @property (weak, nonatomic) IBOutlet UITableView    *table_brands;
  @property (weak, nonatomic) IBOutlet UITableView    *table_items;
  @property (weak, nonatomic) IBOutlet iCarousel      *carousel;
  @property (weak, nonatomic) IBOutlet UIView         *filtersContainer;
@end

И позже в моем GallerySpirituosenViewController.m Я расширяю "iCarrousel", который работает должным образом, и у меня есть один вид с 3 UITableView внутри него.

Здесь я могу показать, как я называю datasource а также delegate для одного стола:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.table_brands.dataSource = self;
    self.table_brands.delegate = self;

    _carousel.type      = iCarouselTypeCoverFlow2;
}

- (void)viewDidUnload
{
    [super viewDidUnload];

    //free up memory by releasing subviews
    self.carousel = nil;
}

и позже этот код, где я заполняю таблицу:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [categories count];//arrays
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    //  NSInteger carouselIndex = [self.carousel indexOfItemViewOrSubview:tableView];
    //  PersonData *data = [items objectAtIndex:carouselIndex];
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    cell.textLabel.text = [categories objectAtIndex:indexPath.row];

    return cell;
}

А вот и отладка категорий объектов:

И indexPath с нулевым значением:

Также здесь объект Category.h

#import <Foundation/Foundation.h>

@interface Categories : NSObject
    @property (nonatomic, retain) NSString *id;
    @property (nonatomic, retain) NSString *title;
    @property (nonatomic, retain) NSString *sys_language_uid;
@end

И Категория.

#import "Category.h"

@implementation Categories

@synthesize id,title,sys_language_uid;


- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:id forKey:@"id"];
    [encoder encodeObject:title forKey:@"title"];
    [encoder encodeObject:sys_language_uid forKey:@"sys_language_uid"];
}

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.id = [decoder decodeObjectForKey:@"id"];
        self.title = [decoder decodeObjectForKey:@"title"];
        self.sys_language_uid = [decoder decodeObjectForKey:@"sys_language_uid"];
    }
    return self;
}


@end

3 ответа

Решение

[categories objectAtIndex:indexPath.row] вернуть объект Категории.

Вы получаете строку, как это.

cell.textLabel.text = [categories objectAtIndex:indexPath.row].id

ИЛИ ЖЕ

cell.textLabel.text = [categories objectAtIndex:indexPath.row].title

Редактировать больше:

Вы должны объявить title variable как это

@property(nonatomic,strong) NSString*title;

НЕ

@property(nonatomic,copy) NSString*title;

Как я понимаю, категории - это объект, а не строка. Какова цель этой линии?

cell.textLabel.text = [categories objectAtIndex:indexPath.row];

Вы сказали:

Когда я звоню:

  (UITableViewCell *)tableView:(UITableView *)tableView
  cellForRowAtIndexPath:(NSIndexPath *)indexPath` 

Я всегда получал indexPath=null со следующей ошибкой.

Метод tableView:cellForRowAtIndexPath: является методом источника данных tableview Вы не должны вызывать этот метод самостоятельно. Табличное представление вызывает этот метод в вашем коде.

Другие вопросы по тегам