ParseデータをPFQueryTableViewControllerのcustom cellに表示したい


PFQueryTableViewControllerのサブクラスを作りLabelをoutlet接続してParseのデータをLabelに表示しようとしていますが上手くいきません。  
Parseチュートリアルや英語stackoverflowを読んでも解決できませんでした。  
どなたか回答宜しくお願いします。  
cell.textLabel.textやcell.detailTextLabel.textなどを使うのではなくUILabelを使ってセルの任意の場所にParseのデータを表示したいのです。

コンソールには[PFTableViewCell postLabel]: unrecognized selector sent to
instanceと出ます。

  * AppDelegate.mではアプリ固有のIDとclientKeyを指定しています。 
  * storyboardでCellのClassにMyTableCellを指定しています。 

MyTableCell.h

[code]

    #import <Parse/Parse.h>
    @interface MyTableCell : PFTableViewCell
    @property (weak, nonatomic) IBOutlet UILabel *postLabel;
    @end
    
[/code]

MyPFQueryTableViewController.h

[code]

    #import <UIKit/UIKit.h>
    #import <Parse/Parse.h>
    @interface MyPFQueryTableViewController : PFQueryTableViewController
    @end
    
[/code]

MyPFQueryTableViewController.m

[code]

    #import "MyPFQueryTableViewController.h"  
    #import "MyTableCell.h"  
    @interface MyPFQueryTableViewController ()  
    @end  
    @implementation MyPFQueryTableViewController
    
    - (id)initWithStyle:(UITableViewStyle)style {   
        NSLog(@"%s",\__func__);  
        self = [super initWithStyle:style];  
        if (self) {  
            self.parseClassName = @"UserPost";  
            self.pullToRefreshEnabled = YES;  
            self.paginationEnabled = YES;  
            self.objectsPerPage = 25;  
        }  
        return self;  
    }
    
    - (PFQuery *)queryForTable {  
        PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];  
        if (self.pullToRefreshEnabled) {  
            query.cachePolicy = kPFCachePolicyNetworkOnly;  
        }  
        if (self.objects.count == 0) {  
            query.cachePolicy = kPFCachePolicyCacheThenNetwork;  
        }  
        [query orderByDescending:@"createdAt"];  
        return query;  
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath object:(PFObject *)object {  
        NSLog(@"%s",\__func__);  
        static NSString *CellIdentifier = @"Cell";  
        PFTableViewCell *cell = (PFTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
        if (cell == nil) {  
            cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];  
        }  
        MyTableCell *PostCell = nil;  
        PostCell = (MyTableCell *)cell;  
        NSString *PostText = [object objectForKey:@"PostText"];   
        PostCell.postLabel.text = PostText;  
        return cell;  
     }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {  
        [super tableView:tableView didSelectRowAtIndexPath:indexPath];  
    }  
    
    @end
    
[/code]




`PFTableViewCell` ではなく、 `MyTableCell` のインスタンスを生成してみてください。

つまり、

誤: `cell = [[PFTableViewCell alloc] initWithStyle:...`

正: `cell = [[MyTableCell alloc] initWithStyle:...`

です。

エラーの原因は、 `PFTableViewCell` のインスタンスなので、 `postLabel` プロパティが存在しないためです。

`-[tableView:cellForRowAtIndexPath:]` の中を、下記のようにしてみてください。

[code]

    MyTableCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];  
    if (cell == nil)
        cell = [[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    cell.postLabel.text = [object objectForKey:@"PostText"];
    return cell;
    
[/code]




カスタムセルの実現方法が間違っていると想像します。

PostCell = (MyTableCell *)cell; 単に型変換でMyTableCellのインスタンスを取得できているように思えません。

まず、「cell.textLabel.textやcell.detailTextLabel.text」を利用してうまくいっているかを確認
その後にカスタムセルを利用して「UILabelを使ってセルの任意の場所にParseのデータを表示」を実現 というステップで進めると良いと思います。
あるいは、カスタムセルの実現を個別に確認した上でParseと組み合わせるとか。

