[英]How to use Protocols objective-c
我需要将Picker选择的值继承到其他地方。我正在尝试下面的代码,但空值来了..请检查我要去哪里。 我必须继承在PickerView
传递的String值。请检查代码
Picker1.h
#import <UIKit/UIKit.h>
@protocol pickerDelegate <NSObject>
-(void)didFinishPicking:(NSString *)pickedStr;
@end
@interface
@property(nonatomic,retain)id<pickerDelegate>delegate;
Picker.m
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
string=[NSString stringWithFormat:@"%@",[list objectAtIndex:row]];
label.text=string;
[self.delegate didFinishPicking:string];
}
- (void)viewDidLoad
{
[super viewDidLoad];
list =[[NSMutableArray alloc]init];
[list addObject:@"a"];
[list addObject:@"b"];
}
Acitivity_1.h
#import <UIKit/UIKit.h>
#import "Picker1.h"
@interface Activity_1 : UIViewController<UIApplicationDelegate, pickerDelegate>{
@property(nonatomic,retain)Picker1 *delegate1;
@property (nonatomic,retain)NSString *str;
@end
活动_1.m
- (void)viewDidLoad
{
[super viewDidLoad];
**this is how i print the value but value is null**
NSLog(@"delegate1%@",self.delegate1.string);
delegate1 = [[Picker1 alloc] init];
[delegate1 setDelegate : self];
}
-(void)didFinishPicking:(NSString *)pickedStr
{
[self setStr:pickedStr];
}
您将在设置它之前打印出委托的值。...因此它将打印null。 您应该在调用didFinishPicking方法时打印出您的字符串,因为这是您设置字符串的地方。
-(void)didFinishPicking:(NSString *)pickedStr
{
[self setStr:pickedStr];
// print the string you have just picked here if you want
NSLog(@"Picked string: %@",pickedStr);
}
请注意一侧:避免使用任何带有数字的名称约定,例如Activity_1,Picker1,这是非常糟糕的代码习惯。
在创建self.delegate1本身之前,您是NSLogging委托。请使用以下代码行。
delegate1 = [[Picker1 alloc] init];
[delegate1 setDelegate : self];
并将NSLog放入“ didFinishPicking”
-(void)didFinishPicking:(NSString *)pickedStr
{
NSLog(@"pickedStr%@", pickedStr);
[self setStr:pickedStr];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.