0

デリゲートパターンの使い方を知っている

  1. プロトコルを宣言する
  2. 必須または任意の方法
  3. id<> delegate財産
  4. [delegate respondtoselector:@selector(method)]
  5. プロトコルの継承class <someProtocol>
  6. -(void) protolcolMethod
  7. class1Obj.delegate = self;

私は自分のアプリでこのいくつかの場所を使用していますが、今は同じアプリでこれを再度行っていますが、respondtoselector が機能していません。唯一の違いは、今回は NavController にあります。

NavController 親 tableview クラス didselectrow、別のビューをプッシュします。このビューには、presentmadelcontroller を呼び出すボタンがあり、ここでプロトコルを宣言し、navigationContoller 親クラスで継承しました。しかし、なぜそれが機能しないのですか? 私はこれに数時間苦労しています。

このクラスはモーダルに提示され、このプロトコルを宣言します

#import <CoreData/CoreData.h>

@protocol xPro <NSObject>
-(void)xGet;
@end

id<xPro> xDel;

@interface rosterForGroup : UIViewController <NSFetchedResultsControllerDelegate>
{
    NSFetchedResultsController *fetchedResultsController;
    NSArray *dispName;
}

@property (strong, nonatomic) IBOutlet UITableView *tableView;

@property (strong, nonatomic) id<xPro> xDel; 

- (IBAction)xFunc:(id)sender;

@end


.m file ...
- (IBAction)xFunc:(id)sender
{
    [xDel xGet];
}

そして、このクラスは NavController 親クラスです

    ...
    @interface groupChatViewController : UIViewController<XMPPRoomDelegate, createNewGroupDelegate, UITableViewDataSource, UITableViewDelegate, xPro>
    ...
    @property (strong, nonatomic) rosterForGroup *xR4G;
    ...


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    xR4G = [[rosterForGroup alloc]init];
    xR4G.xDel = self;
...

-(void)xGet
{
    NSLog(@"AAAAAAH");
}

これらの奇妙なオブジェクト名は避けてください。

rosterforgroup 割り当て/初期化

- (IBAction)openGroupOptions:(id)sender
{
     roster4Group = [[rosterForGroup alloc]init];
     [roster4Group setDelegate:self];
     [self presentModalViewController:roster4Group animated:true];
     //[xmppRoom fetchMembersList]; 
}
4

1 に答える 1

0

おそらく、これは見込みのないことです。しかし、実際に「画面上」にある rosterForGroup は、viewDidLoad メソッドで実行しているインスタンスと同じではないと思われます。alloc/initおそらく、セグエまたはその他の方法でそこに到達しています。ただし、表示するコードは、xR4Gビューコントローラーを含まれているビューコントローラーとして実際に設定し、それを画面に表示していることを示していません(アクションメソッドなどを接続した後)。

これは、ソリューションがView Controllerの関係をわずかに再構築することであることを意味します。これは、それを達成する方法が明確でない場合は、追加のSOの質問に値する可能性があります(この質問は、現状では、アドバイスする適切な場所ではありません欲しいものを手に入れる方法)。

編集

rosterForGroupまた、 View Controller が適切に初期化されていないと思われます。VC で alloc/init を実行するだけでは、そのビューとその IB* 接続が適切にセットアップされません (loadViewメソッドがすべてプログラムで実行しない限り)。それらは、ストーリーボードまたは XIB ファイル (initWithNibName:または[self.storyboard instantiateViewControllerWithIdentifier:]

于 2012-08-05T20:04:38.937 に答える