0

ピッカーが選択した値を他の場所に継承する必要があります。以下のコードを試していますが、null 値が来ています。どこが間違っているのかを確認してください。渡された文字列値を継承するPickerView必要があります..コードを確認してください

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"];    

}

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

2 に答える 2

1

デリゲートの値を設定する直前に出力しているので、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などの番号を使用した命名規則は避けてください。これは非常に悪いコード慣行です。

于 2012-12-18T10:42:12.030 に答える
0

self.delegate1 自体を作成する前に、NSLogging デリゲートです。以下のコード行を使用してください。

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

そしてNSLogを「didFinishPicking」の中に入れます

-(void)didFinishPicking:(NSString *)pickedStr
{
 NSLog(@"pickedStr%@", pickedStr);
 [self setStr:pickedStr];
}
于 2012-12-18T10:40:51.367 に答える