.delegate自我无法识别的选择器发送到实例

时间:2016-10-04 11:03:37

标签: ios objective-c uitableview delegates

我已TableViewController我将所选单元格保存在NSMUtableArray中。选择这些单元格后,用户点击确认按钮,在此按钮操作中,我尝试传递NSMUtableArray,以便我可以将其显示在另一个viewController tableView

#import <UIKit/UIKit.h>

@protocol SelectedDXDelegate;

@interface AddDXTableViewController : UITableViewController 

@property (nonatomic, strong) NSMutableArray *favDXArray;
@property (strong, nonatomic) UISearchController *searchController;
@property (nonatomic, strong) DX *AddEditDX;

@property (weak) id<SelectedDXDelegate> delegate;

- (IBAction)confirmPressed:(id)sender;

@end

@protocol SelectedDXDelegate <NSObject>
@required
-(void)getSelectedDX:(NSMutableArray *)DXselected;
@end

所以当按下确认按钮时

- (IBAction)confirmPressed:(id)sender {

    [self.delegate getSelectedDX:selectedDX];
    [self.navigationController popViewControllerAnimated:YES];
}

它让我进入

-(void)getSelectedDX:(NSMutableArray *)DXselected
{
    myDXSelected = DXselected;
}

但它在

中的reloadData崩溃应用程序
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.DXTableView reloadData];
}

2 个答案:

答案 0 :(得分:0)

您必须在故事板中的身份检查器标签中将故事板中添加的UIViewController添加到AddDXTableViewController

在这里看到图片 enter image description here

在这里您可以看到类类型是ViewController,单击下拉列表并选择类型为AddDXTableViewController

然后将viewController输入到AddDXTableViewController。根据我的猜测,instantiateViewControllerWithIdentifier:返回没有委托的UIViewController可能导致崩溃

AddDXTableViewController *addDXTVC = (AddDXTableViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"DXViewController"];
addDXTVC.delegate = self;

让我知道如果有效

答案 1 :(得分:0)

您似乎混淆了哪个视图控制器应该是委托者,哪个是委托者。此外,您只是分配.dropzone-previews .dz-preview { margin: 0px; margin-bottom: 10px; } .dropzone-previews .dz-preview .dz-image { width: 100px; height: 100px; margin-bottom: 15px; display: block; margin: auto; } .drp-image > img{ display: block; margin: auto; } 的新实例并将其指定为委托。这不起作用;您需要将视图控制器的现有实例设置为委托。

从我的问题可以看出,实际上AddDXTableViewController的实例是DXViewController

的代表

大概在AddDXTableViewController你有一些类似的代码:

DXViewController

您需要做的是在此时设置您的代表:

AddDXViewController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"AddDXViewController"];
[self.navigationController pushViewController:newViewController animated:YES];

说完所有这些之后,由于您使用的是故事板,因此代表可能是实现您的要求的一种不必要的复杂方式;您可以使用segue在第一个和第二个视图控制器之间移动,并使用展开segue返回到第一个。然后,您可以在第二个视图控制器中实现AddDXViewController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"AddDXViewController"]; newViewController.delegate = self; [self.navigationController pushViewController:newViewController animated:YES]; 并使用它将阵列提供回第一个视图控制器