1

私がやりたいことは次のとおりです。

まず、クラス(コントローラー)TopPlacesViewControllerへのセグエがあります。SinglePlacePhotosViewControllerTableView

TopPlacesViewControllerクラスにデリゲートを作成し、prepareforSegueメソッドを使用して をデリゲートとして設定しSinglePlacePhotosViewController、プロトコル メソッドを実装します。

次に、TopPlacesViewController(TableView コントローラー) で写真をクリックするとTopPlacesViewController、その場所の写真を表示するメソッドが呼び出されます。

しかし、私はこのエラーを受け取り続けました:

[SinglePlacePhotosViewController setDelegate:]: 認識されないセレクターがインスタンス 0xc94cc20 に送信されました

私のTopPlacesViewController.hファイル:

@class TopPlacesViewController;  

@protocol TopPlacesViewControllerDelegate    
- (void)topPlacesViewControllerDelegate:(TopPlacesViewController *)sender
                            showPhotos:(NSArray *)photo;   
@end

@interface TopPlacesViewController : UITableViewController

@property (nonatomic,weak) id <TopPlacesViewControllerDelegate> delegate;   
@end   

TopPlacesViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{                                                                                  
    NSDictionary *place = [self.places objectAtIndex:indexPath.row];   
    self.singlePlacePhotos = [FlickrFetcher photosInPlace:place maxResults:50];   
    [self.delegate topPlacesViewControllerDelegate:self showPhotos:self.singlePlacePhotos];  
    [self performSegueWithIdentifier:@"Flickr Photos" sender:self];   
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{   
    if([segue.identifier isEqualToString:@"Flickr Photos"]) {                                  
          [segue.destinationViewController setDelegate:self];     
    }         
}  

次に、これでデリゲートを実装します。

@interface SinglePlacePhotosViewController () <"TopPlacesViewControllerDelegate">    
- (void)topPlacesViewControllerDelegate:(TopPlacesViewController *)sender showPhoto:(NSArray *)photo    
{    
    self.photos = photo;    
}
4

1 に答える 1

1

はい、SinglePlacePhotosviewController のセッター メソッド (setDelegate:) を呼び出しているが、@property (nonatomic,weak) id delegate; を呼び出しているため、エラーは明らかです。TopPlacesViewController にあります。

ここでプロトコルを間違った方法で使用しています。写真の配列を TopPlacesViewController から SinglePlacePhotosviewController に渡したい場合は、prepareSegue メソッドで TopPlacesViewController からの配列を SinglePlacePhotosviewController の配列に割り当てるだけです。

一般に、あるクラスの参照を別のクラスに渡すために使用されるプロトコル。ここでは、TopPlacesViewController に SinglePlacePhotosviewController (segue.destinationController) のインスタンスが既にあります。SinglePlacePhotosviewController で TopPlacesViewController の参照が必要な場合は、SinglePlacePhotosviewController でプロトコルを作成し、TopPlacesViewController の自己を、セグエ メソッドの準備で SinglePlacePhotosviewController のデリゲート プロトコルに渡す必要があります。私はあなたの質問をクリアしたことを願っています, 私に知らせてください.

于 2012-06-30T06:03:09.063 に答える