На самом деле у меня есть три контроллера вида, названных в моем приложении. Я навигации от А до В, а затем B до C. Я звоню метод делегата от C, который реализуется в А. вот мой кодПользовательский делегат не вызван?
A.h
#import "A.h"
#import "C.h"
В A.m
У меня есть
@interface A()<delegateName>
-(void)delegateMethod
{
NSLog(@"delegate");
}
-(void)moveToB
{
C *instanceOfC=[C alloc] init];
instanceOfC.delegate=self; //line 1
}
В B.h
#"import C.h"
В B.m
-(void)moveToC
{
A *instanceOfA=[[A alloc] init];
C *instanceOfC=[[C alloc] init];
instanceOfC.delegate= instanceOfA; //line 2
}
В C.h
@protocal delegateName <NSObject>
-(void)delegateMethod;
@end
@interface C
@property(nonatomic,weak) id<delegateName> delegate;
@end
В C.m
@synthesize delegate;
-(void)inSomeMethod
{
[delegate delegateMethod];
}
если я ставлю <delegateName>
в A.h
вместо A.m
то говорит undeclared delegate
.
- (void) moveToB { C * instanceOfC = [C alloc] init]; instanceOfC.delegate = self; } Я думаю, вам нужно сделать экземпляр класса B здесь –
, чтобы перейти к следующему viewController с помощью pushViewController i, созданного экземпляром b, но когда я отлаживаю [делегировать делегатMethod]; @ этот делегат линии равен нулю, поэтому я назначил этот экземпляр между страницами. – jaymala
Попробуйте это. В A - (void) moveToB { B * instanceOfB = [B alloc] init]; instanceOfB.delegate = self; }. И в B - (void) moveToC { C * instanceOfC = [[C alloc] init]; instanceOfC.delegate = self.delegate; } – Arjuna