2012-03-19 18 views
1

これは簡単な質問ですが、わかりにくいです。私はオブジェクトのプロパティを作成しようとしているので、prepareForSegueの実行中にそのオブジェクトが委譲されていることを伝えることができます。私はプロトコルでこれを行うことができることを知っていますが、私はこのケースでは直接的なアプローチが最も簡単だと考えました。残念ながら、コンパイルエラーに次のコードの結果:私はプロパティ宣言を入力するとデリゲートプロパティを宣言したときのエラー

#import <UIKit/UIKit.h> 
#import "PlanningViewController.h" 

@interface DepartmentViewController : UITableViewController 

@property (nonatomic, weak) PlanningViewController *planningDelegate; 

@end 

、XcodeはPlanningViewControllerを認識しても、私はちょうどタブを通じてへのテキストを表示します。コンパイラは、しかし、文句を言う:

Unknown type name 'PlanningViewController': did you mean 'UISplitViewController'? 

私は間違っている?

#import <UIKit/UIKit.h> 
#import "DepartmentViewController.h" 

@interface PlanningViewController : UITableViewController 


// Table cell connections 
- (IBAction)addItemPressed:(id)sender; 


@end 
+1

'PlanningViewController.h'の内容を表示してください。 – trojanfoe

答えて

1

あなたPlanningViewController.hヘッダファイルからこの行を削除します:

#import "DepartmentViewController.h" 

あなたのヘッダファイルのループの何かを持っている

PlanningViewController.hは次のようになります。

#import <UIKit/UIKit.h> 

@class PlanningViewController; 

@interface DepartmentViewController : UITableViewController 

@property (nonatomic, weak) PlanningViewController *planningDelegate; 

@end 
+0

仕事をしました。ありがとう! – CodeBuddy

+0

@CodeBuddyそれはそれです - 歓声! – trojanfoe

0

私はあなたが一種のデリゲートパタパタの主なポイントの一つを逃したと思う:

まだよく、(あなたのヘッダファイルにPlanningViewController.hを含める必要はありません)このようなDepartmentViewController.h表情を作りますあなたのオブジェクトを切り離すことです。このデリゲートを宣言する最良の方法は、次のようになります。

if ([self.delegate respondsToSelector:@selector(departmentViewController:isProcessingPeople:)]) { 
    [self.delegate departmentViewController:self isProcessingPeople:people]; 
} 

そして、あなたの計画ビューコントローラで

、このメソッドを実装します:あなたの部署のビューコントローラで
#import <UIKit/UIKit.h> 

@protocol DepartmentViewControllerDelegate; // forward declaration of protocol 

@interface DepartmentViewController : UITableViewController 

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

@end 

@protocol DepartmentViewControllerDelegate 
- (void)departmentViewController:(DepartmentViewController *)controller 
       isProcessingPeople:(NSArray *)people 
@end 

、あなたはこのような何かを書きます:

- (void)departmentViewController:(DepartmentViewController *)controller 
       isProcessingPeople:(NSArray *)people { 
    // do necessary work here 
} 

ここでの例は、デリゲートに送信できるメッセージの一例です。あなたは必要なものを追加することができますが、これによりコントローラ間の結合ができなくなります。計画ビューコントローラは、部門コントローラについて必要なものはすべて把握していますが、部署コントローラは計画コントローラについて何も知る必要はありません。

あなたが現在持っているものに固執したいのであれば、それが本当にデリゲートパターンではないことを認識して、おそらくプロパティの名前を変更するべきです。

+0

意味があります。私はそれに固執していますが、あなたが示唆するように、混乱を避けるために名前を変更します。 – CodeBuddy

関連する問題