2011-05-09 135 views
1

我有子類的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。爲什麼是這樣?

回答

3

您是否在創建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