2016-01-01 1 views
1

У меня есть два классаидентификатор делегат непризнанным селектор направил к экземпляру

класса А файл

@property (nonatomic, weak) id delegate; 

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

Класс Am Файл

@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: '. Также ваш код, как показано, не имеет большого смысла - вы выделяете «GroupViewController» - но это находится в локальной переменной, поэтому он будет выпущен, как только «viewDidLoad» выйдет. – Paulw11

ответ

1

Создание протокола для класса B, как показано ниже

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

И изменения объявления делегата, как показано ниже

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

будет удалите ошибку.

+0

Это поможет компилятору узнать, о чем вы говорите, и избегать использования 'id' но это не волшебным образом реализует отсутствующий метод, который является тем исключением, что это проблема. – Paulw11