iOS可变数组始终为null

时间:2014-06-29 17:19:42

标签: ios objective-c arrays uitableview

继续我的难题

我尝试在视图控制器上方放置一个表格视图

视图加载并添加,我用于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的经验是否有我遗漏的东西?

2 个答案:

答案 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]`