代表没有被调用

问题描述:

我有子类的UITableViewCell如下:代表没有被调用

@class MyCell; 

@protocol MyCellDelegate 

- (void) viewController:(MyCell*)viewCon userId:(NSNumber*)uid andType:(NSString*)type; 

@end 

@interface MyCell : UITableViewCell <MHLazyTableImageCell>{ 
    id <MyCellDelegate> delegate; 
    NSNumber * mid; 
    NSNumber * uid; 
} 

- (IBAction) star:(id) sender; 
- (IBAction) reply:(id) sender; 
- (IBAction) message:(id) sender; 

- (void) showMenu; 

@property (nonatomic, retain) id <ConvoreCellDelegate> delegate; 
@property (nonatomic, retain) NSNumber * mid; 
@property (nonatomic, retain) NSNumber * uid; 

委托被称为在IBAction为:

- (IBAction) star:(id) sender 
{ 
    [self.delegate viewController:self userId:mid andType:@"star"]; 
} 

我有另一个UIVewController如下:

@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UITableViewDelegate, UITableViewDataSource, UISplitViewControllerDelegate, RKObjectLoaderDelegate, MHLazyTableImagesDelegate, UITextViewDelegate, ConvoreCellDelegate> { 
    ....... 
} 

并在实施中我把:

- (void) viewController:(MyCell*)viewCon userId:(NSNumber*)uid andType:(NSString*)type 
{ 
    NSLog(@"DELEGATE IS CALLED"); 
    if ([type isEqualToString:@"star"]){ 
     NSLog(@"Message id is %@", uid); 
    } else if ([type isEqualToString:@"reply"]){ 
     [message becomeFirstResponder]; 
     message.text = @"@username"; 
    } else if ([type isEqualToString:@"message"]){ 

    } 
} 

但是它并没有进入到这里面。它从不打印DELEGATE IS CALLED。为什么是这样?

您是否在创建MyCell后实际设置了委托?

简单的检查方法是添加一个断点并查看委托引用是否为零(0x0)。

编辑:根据您的意见,很确定你永远不会设置代表。

当您创建单元格时,必须将委托对象传递给该单元格,以便它可以调用某个对象。否则,你只是发送消息给一个无对象。

因此,假设您在表视图控制器创建你的细胞正常:

MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:@"CellID"]; 
    if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil]; 
     cell = [topLevelObjects objectAtIndex:0]; 
     cell.delegate = self; // <-------- set the delegate after creation 
    } else { 
     NSLog(@"cached cell"); 
    } 

    //Do you other cell stuff, setting mid and uid for example. 
+0

你是什么意思通过设置代理? – adit 2011-05-09 18:21:15

+0

并在其中添加一个断点 – adit 2011-05-09 18:21:53

+0

1.在 - (IBACTION)star:(id)sender方法中设置断点。但根据你的第一条评论,我们已经知道这个问题会是什么(它没有设置,所以它是零)。更新答案以提供更多帮助。 – MarkPowell 2011-05-09 18:59:59