私はiOS用に開発してから数か月しか経っていません。プロトコルを何度も使用していますが、この問題に数日間悩まされています。
これが私のコードです
子ヘッダーファイル:QuoteSelections.h
@protocol myDelegate
@optional -(void)selectedValueIs:(NSString *)value;
@end
@interface QuoteSelections : UITableViewController<UITableViewDataSource, UITableViewDelegate> {
}
@property (retain, nonatomic) NSMutableArray *ArrDetails;
@property (assign) id<myDelegate> delegate;
@end
子メソッドファイル:QuoteSelections.m
@implementation QuoteSelections
@synthesize delegate;
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *valueString = @"Test";
[self.delegate selectedValueIs:valueString];
[self.navigationController popViewControllerAnimated:YES]; }
selectedValueIs
テスト文字列を使用してデリゲートメソッドを呼び出しました。
親ヘッダーファイルは次のとおりです:newQuoteSec.h
@interface newQuoteSec : UITableViewController <myDelegate> {
QuoteSelections *quoteSelections; }
これが私の親メソッドファイルです:newQuoteSec.m
(void)viewDidLoad {
[super viewDidLoad];
quoteSelections = [[QuoteSelections alloc]init];
quoteSelections.delegate = self; }
(void)selectedValueIs:(NSString *)value {
ddlPurposeOfLoan.text = value; }
子コントローラーのデリゲートをに設定しました。これでメソッドviewDidLoad
を呼び出すのに十分だと思いましselectedValueIs
たが、そうではありません。なんで?
これがYogeshが推奨する編集バージョンです
目的は、2番目のView Controllerで選択したアイテムの値を設定して、最初のViewControllerのテキストフィールドに入力することです。
QuoteSelections.h
@protocol myDelegate
@optional -(void)selectedValueIs:(NSString *)value;
@end
@interface QuoteSelections : UITableViewController<UITableViewDataSource, UITableViewDelegate>
{
}
@property (assign) id<myDelegate> myDelegate;
QuoteSelections.m
#import "QuoteSelections.h"
@interface QuoteSelections ()
@end
@implementation QuoteSelections
@synthesize myDelegate;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *valueString = @"Test";
[self.myDelegate selectedValueIs:valueString];
[self.navigationController popViewControllerAnimated:YES];
}
newQuoteSec.h
@interface newQuoteSec : UITableViewController <STComboTextDelegate, STDateTextDelegate, JSONRPCServiceDelegate, UITextFieldDelegate, UITableViewDelegate, myDelegate>
{
QuoteSelections *quoteSelections;
}
newQuoteSec.m
- (void)viewDidLoad
{
[super viewDidLoad];
quoteSelections = [[QuoteSelections alloc]init];
quoteSelections.myDelegate = self;
}
-(void)selectedValueIs:(NSString *)value
{
ddlPurposeOfLoan.text = value;
}
編集...
デリゲートが設定される直前にNSLogを挿入しました
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *valueString = @"Test";
NSLog(@"Showing the delegate didSelectRowAtIndexPath%@", self.myDelegate);
selectedValue = valueString;
[self.myDelegate selectedValueIs:valueString];
[self.navigationController popViewControllerAnimated:YES];
}
出力ウィンドウにnullが表示されます
2012-11-27 10:23:59.562 miLoan [18225:c07]デリゲートの表示didSelectRowAtIndexPath(null)
なぜ何かアイデアはありますか?他のすべてはよさそうだ。
絵コンテも使っています!