2011-08-13 56 views
0
@protocol SomeDelegate 
- (void) didSomeAction; 
@end 

@interface A:ViewController { 
id<SomeDelegate> delegate; 
} 

@property (nonatomic, retain) id<SomeDelegate> delegate; 

@implementation A 
@synthesize delegate; 

- (void)someMethod { 
[delegate didSomeAction]; 
} 

- (void)viewDidLoad { 
B *b = [[B alloc] init]; 
} 

/*=========================*/ 

@interface B:NSObject<SomeDelegate> { 

} 

@implementation B 

#pragma mark - 
#pragma mark SomeDelegate methods 

- (void)didSomeAction { 

} 

B應該發送消息給A,爲什麼這不起作用?客觀c,代表

+0

歡迎堆棧溢出,並請閱讀[如何提問](http://stackoverflow.com/questions/how-to-ask)前問這問那... – jtbandes

回答

1

如果我理解正確你正在嘗試做的,這應該是正確的:

-(void)someMethod { 
    [delegate didSomeAction]; 
} 

-(void)viewDidLoad { 
    delegate = [[B alloc] init]; 
} 

否則,當你調用[delegate didSomeAction];delegate是零,該消息被忽略。

2

您需要將b設置爲委託。

self.delegate = b; 

但是使用委託通常的方式是倒過來:

SomeClass* obj = [[SomeClass alloc] init]; 
obj.delegate = self; 

注意代表團是不客觀的-C的功能。這只是一種設計模式! http://en.wikipedia.org/wiki/Delegation_pattern

+0

謝謝,它的工作)) – koke

0

對象通常不會自己創建它們的代表。相反B應該創建一個實例的A,並設置自己爲對象的委託:

@implementation B 

- (void)awakeFromNib { 
    self.a = [[[A alloc] init] autorelease]; 
    self.a.delegate = self; 
} 

@end 
0

如果你只是想發送簡單的消息給其他類,可以使用NSNotification

在B級文件

- (void)someMethod { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"NofifyMe" object:self userInfo:nil]; 
} 

在類文件中

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didSomeAction:) name:@"NofifyMe" object:nil]; 
- (void)didSomeAction { 

} 

因此,只要你的someMethod調用,那麼你的B類將只是發送消息到你的類A來調用didSomeAction。在dealloc中刪除觀察者

-(void)dealloc{ 
     [[NSNotificationCenter defaultCenter] removeObserver:self]; 
     [super dealloc]; 
} 
+0

有替代方法以及**只是將消息**從一個類A傳遞給一個類B –

+0

簡短,清除非常有幫助 – koke

+0

嗯。現在它爲你工作? –