1

私は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)

なぜ何かアイデアはありますか?他のすべてはよさそうだ。

絵コンテも使っています!

4

1 に答える 1

0

デリゲート (UITableViewDelegate) プロパティが既に 1 つあるため、QuoteSelections Controller クラスのデリゲートの名前を変更します。

変化する

@property (assign) id<myDelegate> delegate;

@property (assign) id<myDelegate> myDelegate;

また、他のすべての場所で変更します。

于 2012-11-26T15:45:35.370 に答える