我尝试在视图控制器上方放置一个表格视图
视图加载并添加,我用于tableview的数组总是为null,因此表总是为空!
这是我的视图头文件,包含我的tableview和可变数组属性
@interface IngredientsView : UIView <UITableViewDataSource,UITableViewDelegate>
- (id)initWithFrame:(CGRect)frame andIngredients:(NSMutableArray*)ingredientsArray;
- (id)initWithIngredients:(NSMutableArray*)ingredientsArray;
@property (weak, nonatomic) IBOutlet UITableView *notesTableView;
@property NSMutableArray* ingredients;
我的自定义init方法接受数组并设置它 - 这是我的自定义init
- (id)initWithIngredients:(NSMutableArray*)ingredientsArray;
{
self.ingredients = [[NSMutableArray alloc]init];
self.ingredients=ingredientsArray;
NSLog(@"hello from init %lu", (unsigned long)[self.ingredients count]);
if (self) {
self = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", [self class]] owner:self options:nil] objectAtIndex:0];
UIImageView* view = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"ingredients background.png"]];
self.notesTableView.backgroundView=view;
self.backgroundColor = [UIColor colorWithRed:0/255.0f green:0/255.0f blue:0/255.0f alpha:0.6f];
self.notesTableView.dataSource = self;
self.notesTableView.delegate = self;
UIGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(close)];
[self addGestureRecognizer:tapGesture];
[self.notesTableView reloadData];
}
return self;
}
在init方法中,self.ingredients数组将向NSlog返回一个计数(例如6个对象)
但是在我的委托表视图方法numberOfSectionsFor:index path中它总是返回0,好像数组是nil
我试过了
所有部分的数量都返回0?
是tableview nil?
我通常使用表视图控制器并且没有太多使用tableviews的经验是否有我遗漏的东西?
答案 0 :(得分:1)
你的设置self.ingredients = ingredientsArray;然后在下面的行中将self设置为你加载的笔尖,覆盖自己。在将self设置为nib后,将self.ingredients赋值移动到。
答案 1 :(得分:0)
您的哪个初始值设定项被调用?如果从xib文件加载,当然
-(id) initWithFrame:(CGRect)frame andIngredients:
未被称为
- (id) initWithFrame:
是视图的指定初始值设定项。所以当从nib文件加载视图时会调用它。
无论如何,initWith...
代码应该做的第一件事是:
self = [super initWithFrame: ... ]
if (self)
{
...
}
最关键的问题:
您正在分配self = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", [self class]] owner:self options:nil] objectAtIndex:0];
你刚刚对正在初始化的self
进行了抨击。
如果您希望从XIB文件加载IngredientsView
,您可能还会考虑实现-(void) awakeFromNib {...}
来设置属性,或者在 - (self)InitWithFrame中设置属性:... 。after calling
[super initWIthFrame:rect]`