我有一个父 ViewController (SearchViewController),它连接到一个 TableViewController (FilterTableViewController),用户可以在 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
过滤表视图控制器.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 更好的传递 Array 的地方,因为可以进行多个选择,并且只有在按下 Back 按钮时才能传递 Array。我可以使用 *- (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:如何从第二个 ViewController 传递多个 Array?
提前致谢!