我正在尝试将选定的单元格文本从CategoryViewController传递到DescribeViewController。但是它没有在DescribeViewController方法中调用该方法。
CategoryViewController.h
#import <UIKit/UIKit.h>
@protocol CategoryViewControllerDelegate <NSObject>
- (void)didSelectRow:(NSString *)cellDataString;
@end
@interface CategoryViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) id<CategoryViewControllerDelegate> delegate;
@end
CategoryViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [categoryTableView cellForRowAtIndexPath:indexPath];
NSString *cellText = cell.textLabel.text;
[self.delegate didSelectRow:cellText];
[[self navigationController] popViewControllerAnimated:YES];
}
DescribeViewController.h
#import <UIKit/UIKit.h>
#import "CategoryViewController.h"
@interface DescribeViewController : ProductAwareBaseViewController<UITextFieldDelegate, CategoryViewControllerDelegate>
未调用以下didSelectRow
方法。我无法找到问题的根源。
DescribeViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
CategoryViewController *popoverTableViewController = [[CategoryViewController alloc] init];
popoverTableViewController.delegate = self;
}
- (void)didSelectRow:(NSString *)cellDataString
{
self.cellDataString = cellDataString;
}
ProductAwareBaseViewController.h
@import UIKit;
@class Product;
@interface ProductAwareBaseViewController : UIViewController
@property (nonatomic, strong) Product *product;
@end
ProductAwareBaseViewController.m
#import "ProductAwareBaseViewController.h"
#import "Product.h"
@interface ProductAwareBaseViewController ()
@end
@implementation ProductAwareBaseViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.destinationViewController isKindOfClass:[ProductAwareBaseViewController class]]) {
ProductAwareBaseViewController *vc = (ProductAwareBaseViewController *)segue.destinationViewController;
vc.product = self.product;
}
}
@end
答案 0 :(得分:0)
试
@property (nonatomic, weak) id <CategoryViewControllerDelegate> delegate;
宣布你的代表。
尝试检查委托是否返回一些值。 这样,只要你设置值。
if(self.delegate && [self.delegate respondsToSelector:@selector(didSelectRow:)])
{
[self.delegate didSelectRow:(NSString *) cellDataString];
}
如果您使用segue在两个控制器之间传输数据,那么请检查代理人。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DescribeViewController *obj = (DescribeViewController *)segue.destinationViewController;
obj.delegate =self;
}
我认为这会对你有帮助。
答案 1 :(得分:0)
尝试在didSelectRow中设置委托对象。然后在那之后调用该委托方法。因为委托很弱,可能是从记忆中释放出来的。
IFile file = (IFile) ((IStructuredSelection) wbw.getSelectionService().getSelection()).getFirstElement();
答案 2 :(得分:0)
委托方法未被调用的最常见原因是处理不正确的对象。
CategoryViewController
对象创建
DescribeViewController
与您所呈现的相同
屏幕和委托被设置在同一个对象上。我真的相信你正在创建一个新的CategoryViewController
对象并设置委托。DescribeViewController
中,在调用委托之前,请检查
委托的存在,它实现了协议方法(如果
它是一个可选的方法)。这是一个安全检查,你也可以放一个NSLog
语句来仔细检查你的代表是否存在。你在这里失败了。- &GT;
if (delegate && [delegate respondsToSelector:(didSelectRow:)]) {
[self.delegate didSelectRow:cellText];
}
PS:如果您从DescribeViewController
转到CategoryViewController
,则在prepareForSegue:
设置委托。
请遵循以下指南,我相信您可以解决问题!