2016-01-01 36 views
1

我有兩個類ID代表無法識別的選擇發送到實例

類阿文件

@property (nonatomic, weak) id delegate; 

-(void)displayAllGroups:(NSArray *)groups; 

類上午文件

@synthesize delegate; 

view didLoad { 

    _array_groups = [Group getAllGroups:json]; 

    if ([_array_groups isKindOfClass:[NSArray class]]) 
    { 
     NSLog(@"type of NSArray");// 
     [delegate displayAllGroups:_array_groups];// error 
    } 
    else 
    { 
     NSLog(@"not a type of NSArray"); 
    } 
} 

這是實現我曾經ID代表的一類發送group_array b類。 B級是打擊

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    GroupsViewController *groupView=[[GroupsViewController alloc]init]; 
    [groupView setDelegate:self]; 
} 
-(void)displayAllGroups:(NSArray *)groups 
{ 
    NSLog(@"all groups arrays are:%@",groups); 
} 

注:錯誤是[delegate displayAllGroups:_array_groups];-[HomeViewController displayAllGroups:]: unrecognized selector sent to instance 0x7fbfcb644b20'

+0

代表定義?? –

+0

我們可以在沒有定義的情況下使用id委託,無法識別的選擇器有錯誤 – khaskheli

+2

消息很明確 - 設置爲委託的對象是'HomeViewController'的一個實例,它不實現'displayAllGroups:'方法。同樣,你的代碼如圖所示沒有多大意義 - 你分配一個'GroupsViewController' - 但是這是一個局部變量,所以一旦'viewDidLoad'退出就會被釋放。 – Paulw11

回答

1

創造了B級協議如下

@protocol B_Delegate <NSObject> 
@optional 
-(void)displayAllGroups:(NSArray *)groups; 
@end 

和不斷變化的委託聲明如下

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

會刪除錯誤。

+0

這將幫助編譯器知道您在說什麼並避免使用'id'但它不會奇蹟般地實現一個缺失的方法,這是例外說的問題。 – Paulw11

相關問題