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 Вы не должны вызывать этот метод самостоятельно. Табличное представление вызывает этот метод в вашем коде.