0

TableViewController(FilterTableViewController)にセグエする親ViewController(SearchViewController)があり、ユーザーはTableViewで人物を選択できます。選択内容は、selectedpersonArrayと呼ばれるNSMutableArrayに格納されます。これは、すでに正常に機能しています。しかし今、私はそれらを親のViewControllerに戻す必要があります。プロトコル/デリゲートを実装しようとしました。私はObjective-Cを初めて使用するため、一部の部分を正しく理解しておらず、機能しません。

FilterTableViewController.h(子コントローラー)

@protocol filterDelegate <NSObject>
-(void)addArraytoSearchViewController:(NSMutableArray *)array;
@end

@interface FilterTableViewController : UITableViewController

@property (nonatomic, assign) id <filterDelegate> selectedpersonDelegate;


@property (nonatomic, retain) NSMutableArray *selectedpersonArray;    

@end

FilterTableViewController.m

#import "FilterTableViewController.h"

@interface FilterTableViewController ()
@end

@implementation FilterTableViewController

...

@synthesize selectedpersonArray;
@synthesize selectedpersonDelegate;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...

[[self selectedpersonDelegate] addArraytoSearchViewController:selectedpersonArray];
NSLog(@"personarray: %@", selectedpersonDelegate);
}

質問1:NSLogに代理人を表示できますか?ここではnilを返しますが、selectedpersonArrayには値が含まれています。質問2:複数の選択が可能であり、[戻る]ボタンが押された場合にのみ配列を渡すことができるため、didSelectRowAtIndexPathよりも配列を渡すのに適した場所はありますか。*-(void)prepareForSegue:(UIStoryboardSegue )segue sender:(id)senderを使用できますか?

SearchViewController.h :(親ビュー)

#import "FilterTableViewController.h"

@interface SearchViewController: UIViewController <UITableViewDataSource, UITableViewDelegate, filterDelegate>

SearchViewController.m:

@implementation SearchViewController

...

- (void)viewDidLoad{
    FilterTableViewController * FTC = [[FilterTableViewController alloc] init];
    FTC.delegate = self;

- (void)addArraytoSearchViewController:(NSMutableArray *)array {
    NSLog(@"%@", array);
}

質問3:NSLogはここでは何もしません...何が問題なのですか?質問4:2番目のViewControllerから複数の配列を渡すにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

0

そのため、セグエが提示している FilterTableViewController でデリゲートを実際に設定していないように聞こえます。prepareForSegue:sender:明らかに他のデータもプッシュしているメソッドにデリゲートを設定するだけです。

現在、あなたの-[SearchViewController viewDidLoad]メソッドでは、 FTC と呼ばれる別のインスタンスを作成し、そのデリゲートを設定してから、すぐにその FTC インスタンスを破棄しています。そのインスタンスは、セグエによってプッシュされるインスタンスとは無関係です。

あなたの他の質問について:

1.) はい、デリゲートが表示されるはずです。

2.) はい、複数の選択を収集したい場合は、選択が完了したときにデリゲートに通知する方がおそらく理にかなっています。

3.) デリゲートを正しく設定していないため、このメソッドは呼び出されない可能性があります。

4.) 配列が 2 つある場合は、デリゲート メソッドに 2 つのパラメーターを含めることができます。2 を超える場合は、配列の辞書、または配列の配列について考えます。

それが役立つことを願っています。

于 2013-02-11T00:44:33.697 に答える