이 문제로 인해 좌절감을 느낍니다. 위임자가 작동하지 않습니다. 아래 코드 예는 다음과 같습니다. 난 그냥 xib이 응용 프로그램에서 사용하고 있습니다.위임자가 IOS에서 작동하지 않습니다.
//classA.h 파일이 ClassA.h
#import "ClassB.h"
@interface ClassA : UIViewController<ClassBDelegate>
//classA.m file
**ClassA.m**
-(void)didSuccessPreview:(ClassB *)controller andLog:(NSString *)log{
NSLog(@"%@", log);
}
//classB.h file
**ClassB.h**
#import <UIKit/UIKit.h>
@class ClassB;
@protocol ClassBDelegate <NSObject>
- (void)didSuccessPreview:(ClassB *)controller andLog:(NSString *)log;
@end
@interface ClassB : UIViewController
@property (weak, nonatomic) id<ClassBDelegate>delegate;
//classB.m file
**ClassB.m**
I add this code below inside view did load
[self.delegate didSuccessPreview:self andLog:@"zz"];
나는 위의 코드와 같은 내 응용 프로그램 내부의 다른 대리자를 가지고 있지만 작동하지만,이 하나가 아닌, 나도 몰라 왜. 내 classA 안에는 단추가 있는데 클래스 B로 이동하면 ClassB에서 viewdidload로 이동하면 대리자가 실행되지 않습니다. .
가ClassB viewController = [ClassB new];
ClassA delegateStrongRef = [ClassA new]
viewController.delegate = delegateStrongRef; // <-- you are missing this now;
// Fixed: the ClassA object must be referenced strongly somewhere else
// besides the (weak)delegate property, otherwise it will be deallocated.
(위의 코드는 당신이 ClassB
의 인스턴스를 생성하는 부분입니다, 뷰 컨트롤러 그것은 수 있습니다 :
언제 대리인을 설정 하시겠습니까? (즉,'self.delegate = someObject') –
객체를 생성해야합니까? ClassB * test = [ClassB new]와 test.delegate = self를 추가했지만 작동하지 않습니다. – user2749248
프로토콜을 채택한 ClassA의 인스턴스를 만들어야합니다. 그것은'ClassB' 객체의'delegate' 속성에 대한 것입니다. 위의 코드에서'self.delegate'가'nil' (제로)이면 메소드는 실행되지 않습니다! –