私はこれに数日間苦労しており、途中で貴重な助けを借りて、タイプミスの可能性を減らすために可能な限り単純なプロジェクトを作成しました。私のプロジェクトはすべて、childViewControllerにフックされたコンテナビューを保持するViewControllerです。「親」ViewController は、childViewController のデリゲートとして設定されます。子の viewDidLoad では、単なる文字列である値を渡しています。この文字列は親に渡され、コンソールに出力されます。ここにファイルがあります。
ViewController.h
#import <UIKit/UIKit.h>
#import "ChildViewController.h"
@interface ViewController : UIViewController <ChildViewControllerDelegate>
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@property NSString *myValueRetrieved;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
ChildViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildVC"];
controller.delegate = self;
NSLog(@"Here is my value: %@",self.myValueRetrieved);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void) passValue:(NSString *)theValue{
self.myValueRetrieved = theValue;
}
@end
ChildViewController.h
#import <UIKit/UIKit.h>
@protocol ChildViewControllerDelegate;
@interface ChildViewController : UIViewController
@property (weak)id <ChildViewControllerDelegate> delegate;
@end
@protocol ChildViewControllerDelegate <NSObject>
- (void) passValue:(NSString*) theValue;
@end
ChildViewController.m
#import "ChildViewController.h"
@interface ChildViewController ()
@property NSArray *colors;
@end
@implementation ChildViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.delegate passValue:@"Hello"];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
アプリが起動されると、コンソールは次のメッセージをログに記録する必要があると考えるのは正しいですか: 「ここに私の値があります: こんにちは」. 論理的に委任を受けられないという点で何か間違っていますか、それともどこかで愚かなタイプミスですか? TX