궁극적으로 ALAssetsLibrary를 통합 한 iOS 앱을 작성하려고하지만 위임을 이해하기위한 첫 번째 단계로 두 개의보기 컨트롤러간에 간단한 메시지를 전달하려고합니다. 웬일인지, 나는 메시지를 건네 줄 수 없다. 특히 델리게이트 객체 (derpy)가 존재하지 않는 것 같습니다 (if(self.derpy)
은 NO
을 반환합니다).대리자 개체가 메서드 호출에 응답하지 않는 이유는 무엇입니까?
나는 Apple 포럼에서 같은 질문을하고 대신에 segues를 사용하고 self.child를 사용하여 속성/호출 방법을 설정해야한다고 들었지만 이상하게 보입니다. 부모/자식 속성을 사용하여 메시지를 전달할 경우 Interface Builder에서 내보기를 만들 수 있습니까? UINavigationController 내부에서 내 두 가지 뷰를 설정하고 나면 실제로 "연결"하는 방법을 모르므로 메시지를 전달할 수 있습니다. 질문이 지나치게 광범위하면 죄송합니다.
인터페이스 :
#import <UIKit/UIKit.h>
#import <AssetsLibrary/AssetsLibrary.h>
@protocol DerpDelegate <NSObject>
@required
- (void) test;
@end
@interface PickerViewController : UIViewController
@property (nonatomic, assign) id<DerpDelegate> derpy;
@end
구현 :
#import "PickerViewController.h"
@interface PickerViewController()
@end
@implementation PickerViewController
- (void)viewDidLoad
{
[super viewDidLoad];
if (self.derpy) { // If the delegate object exists
[self.derpy test]; // send it this message
} else {
NSLog(@"Still not working."); // This always returns (i.e., self.derpy doesn't exist)
}
}
위임 컨트롤러 (MainViewController) 인터페이스 :
여기 내가 (전화 PickerViewController)에서 프로토콜을 선언하고있어 컨트롤러의#import <UIKit/UIKit.h>
#import "PickerViewController.h"
@interface MainViewController : UIViewController <DerpDelegate> // public promise to implement delegate methods
@property (strong, nonatomic) PickerViewController *picker;
- (void) test;
@end
그리고 마지막으로, 대리인 컨트롤러 (MainViewController) 구현 :
#import "MainViewController.h"
#import "PickerViewController.h"
@interface MainViewController()
@end
@implementation MainViewController
// Here's that method I promised I'd implement
- (void) test{
NSLog(@"Test worked."); // This never gets called
}
- (void)viewDidLoad {
[super viewDidLoad];
self.picker.derpy = self;
//lazy instantiation
- (PickerViewController *) picker{
if(!_picker) _picker = [[PickerViewController alloc]init];
return _picker;
}
편집 : 많은 감사 self.picker.derpy = self
와 함께 올바른 방향으로 날을 가리키는 위해 rydgaze,하지만 어떤 이유로, 상황이 여전히 제대로 작동하지 않습니다. 중요하게, 해당 속성이 설정되면 if(self.picker.derpy)
은 MainViewController에서 YES
을 반환합니다. 그러나 if(self.derpy)
은 PickerViewController의 viewDidLoad
내부에서 호출 할 때 여전히 NO
을 반환합니다. 재산은 어떻게 존재할 수 있으며 동시에 존재할 수 없습니까?
을 내 꺾쇠 괄호가 표시되지 않는 몇 가지 이유. 어떻게 든 그들을 벗어날 필요가 있습니까? – jefflovejapan
코드를 선택한 코드 형식 버튼 만 사용하십시오. 왜이 모든 무료 전화가 있죠? – vikingosegundo
(코드 형식 버튼은 텍스트 입력 화면 위의'{} '버튼입니다. 코드를 강조 표시하고 해당 버튼을 누르십시오.) –