2012-12-18 32 views
0

我需要将Picker选定的值继承到其他地方。我正在尝试下面的代码,但是null值即将到来。请检查我要出错的位置。 我必须继承被一直通过在PickerView ..please检查代码如何使用协议objective-c

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 

Activity_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]; 
} 
+0

请阅读有关[协议]的文档(http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/_index.html#//apple_ref/doc/uid/TP40007594-CH1 -SW1) –

+0

雅我已阅读此..但你能让我知道我的代码在哪里错了 – Christien

+0

尝试阅读有关[代表](http://developer.apple.com/library/ios/#documentation/General /Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html)以及然后 –

回答

0

创建self.delegate1本身 请使用的代码下面的行之前你NSLogging代表。

delegate1 = [[Picker1 alloc] init]; 
[delegate1 setDelegate : self]; 

并把NSLog的“didFinishPicking”

-(void)didFinishPicking:(NSString *)pickedStr 
{ 
NSLog(@"pickedStr%@", pickedStr); 
[self setStr:pickedStr]; 
} 
+0

not working..again null ... – Christien

+0

是的,因为字符串的委托甚至没有在视图didLoad方法中设置,但self.delegate1不是null至少 – tiguero

+0

@Christien,我更新了我的答案。 –

1

您打印出一个代表你设置它之前的值内....所以它会打印空。当你调用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这是非常糟糕的代码实践。

+0

不,如果我在这里使用...它甚至不显示'委托1'或null ..我认为..方法不叫 – Christien

+0

你在didFinishPicking方法中调试吗? – tiguero

+0

是的男人! didFinishPicking我用.. – Christien