2623


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]


CC BY-SA 3.0
2014-12-22T19:17:00.197
2399
2014-12-26T07:09:00.217
2014-12-23T01:16:01.803
3313
4233
question
ios objective-c xcode parse.com
ParseデータをPFQueryTableViewControllerのcustom cellに表示したい


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

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

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


CC BY-SA 3.0
2014-12-24T12:15:33.350
2497
2014-12-24T12:15:33.350
4956
2399
answer


story board側でMyTableCellを指定しているセル内にラベルを設置していますか？

そのセルを「IBOutlet UILabel *postLabel;」と接続していますか？

「unrecognized selector sent to
instance」が出るときには表示された値のインスタンスを実体化できていないときだと思いますので、おそらく上記の内容あたりが原因ではないでしょうか？


CC BY-SA 3.0
2014-12-24T19:25:00.943
2510
2014-12-24T19:25:00.943
5694
2399
answer


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


CC BY-SA 3.0
2014-12-26T07:09:00.217
2623
2014-12-26T07:09:00.217
5609
2399
answer