2016-09-12 10 views
0

私はPostオブジェクトを持っています。PostTableViewCellを初期化しようとしています。以下は、私は私のビューコントローラでやっているものです -カスタムオブジェクトでカスタムUITableViewCellを初期化する

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

static NSString *identifier = @"Post"; 
Post *post = [self.posts objectAtIndex:indexPath.row]; 
PostTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifier]; 

cell.post = post; 

return cell; 
} 

cellForRowでは、オブジェクトがすべて正しいデータでインスタンス化されています。なぜPostプロパティはPostTableViewCell.hにありますが、awakeFromNibは実行されますか?私が持っているPostTableViewCell.h

からawakeFromNibは、そのプロパティがまだ設定されていないためであると呼ばれたとき

@property (strong, nonatomic) Post *post;

+0

あなたの投稿のプロパティは強力ですか? –

+0

はい、それはどのように見えるかを編集しました。 –

+0

'[self.posts objectAtIndex:indexPath.row];'オブジェクトを返しますか?それをチェックしてもらえますか?あなたは 'self.posts'をどうやって入手していますか? – Lion

答えて

1

理由postnilです。 UITableViewは、テーブルビューセルのインスタンス化を処理します。これは、dequeueReusableCellWithIdentifier:を呼び出す前に発生します。セルのインスタンス化後に、セルのpostプロパティをに設定しています。

-(void)setPost:(Post *)postPostTableViewCell.mに置き換えてください。これは、プロパティを設定するときに自動的に呼び出されるプロパティの設定ツールです。

- (void)setPost:(Post *)post { 
    if (post != _post) { 
    _post = post; 
    [self updateCellAppearance]; // Your own method that updates the cell's data and appearance as needed 
    } 
} 
+0

ありがとうございますAdamPro13 - 私はあなたが意味するものを参照してください。私が混乱している唯一の事は、PostTableViewCellではなく私のモデル 'Post.m'で上書きすることです。 –

+1

私はそれを働かせました、ありがとう@ AdamPro13。唯一のことは、私のモデル 'Post.m'ではなく、' PostTableViewCell.m'で行ったことです。ありがとうございました! –

+0

良いキャッチ。それは私の間違いです。私は上記の応答を修正した.. – AdamPro13

0

awakeFromNibapple documentationを参照してください、それは Interface Builderのアーカイブ、またはnibファイルからロードされた後、

は、サービスのための受信機を準備します。

ですので、cellの場合は、最初に呼び出されます。それ以降はcellForRowAtIndexPathが呼び出され、tableViewがスクロールされるたびに、再利用可能になるようにセルがデキューされますが、このメソッドはawakeFromNibの後に呼び出します。 postオブジェクトをにawakeFromNibに表示していません。