2014-10-28 95 views
0

我試圖創建一個廈門國際銀行自定義表格視圖單元格,但是當我打電話的時候:崩潰創建自定義的UITableViewCell

CustomReferenceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

我得到如下:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7aa59c00> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 

這裏是我的設置:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.tableView registerNib:[UINib nibWithNibName:@"CustomReferenceTableViewCell" 
              bundle:[NSBundle mainBundle]] 
    forCellReuseIdentifier:@"referenceCell"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"referenceCell"; 

    CustomReferenceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     cell = [[CustomReferenceTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 

    cell.number.text = @"1"; 
    cell.referenceName.text = @"Name"; 
    cell.reference.text = @"The text of the reference"; 

    return cell; 
} 

這是我的連接圖片在inter面對建造者。另外我cellIdentifiers類和廈門國際銀行之間的匹配:

enter image description here

我已經看到了這個帖子here,但我似乎仍不能得到它的工作。

幫助將不勝感激。

編輯

這裏是表示自定義類的設定的照片。下面是我對tableViewCell初始化器:

enter image description here

這裏是標題:

#import <UIKit/UIKit.h> 

@interface CustomReferenceTableViewCell : UITableViewCell 

@property (nonatomic, weak) IBOutlet UILabel *number; 
@property (nonatomic, weak) IBOutlet UILabel *referenceName; 
@property (nonatomic, weak) IBOutlet UILabel *reference; 

@end 

這裏是實現:

#import "CustomReferenceTableViewCell.h" 

@implementation CustomReferenceTableViewCell 

- (void)awakeFromNib { 
    // Initialization code 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 
+0

請您可以發佈您的代碼CustomReferenceTableViewCell初始化 – pbasdf 2014-10-28 11:10:13

+0

我認爲'參考',''參考名''和'號'都聲明爲屬性在CustomRefernceTableViewCell.h – pbasdf 2014-10-28 11:19:58

+0

是的。他們都是連接在xib上的IBOutlets。 – pls 2014-10-28 11:23:47

回答

2

我覺得你的細胞的文件所有者設置到你不應該做你的自定義單元格。該辦法把事情工作了自定義單元格是,

  1. 在你的廈門國際銀行,有一個表視圖細胞成分的填充單元格的內容在其ContentView

  2. 將您的課程CustomReferenceTableViewCell作爲該單元格組件的自定義類。

  3. 現在,不要在你的tableview中註冊單元格;而不是做在cellForRowAtIndexPath以下時,你的細胞是nil後[tableView dequeueReusableCellWithIdentifier:cellIdentifier];然後註冊它:

    cell = [self.tableView dequeueReusableCellWithIdentifier:cellID]; 
    if(cell == nil) { 
        [self.tableView registerNib:[UINib nibWithNibName:[@"CustomReferenceTableViewCell" ] bundle:nil] forCellReuseIdentifier:cellID]; 
        NSArray *nibContents; 
        CustomReferenceTableViewCell *cell; 
        nibContents = [[NSBundle mainBundle] 
            loadNibNamed:nibName owner:self options:NULL]; 
        NSEnumerator *nibEnumerator = [nibContents objectEnumerator]; 
        NSObject *nibItem = nil; 
        while ((nibItem = [nibEnumerator nextObject]) != nil) { 
         if ([nibItem isKindOfClass:[CustomReferenceTableViewCell class]]) { 
          cell = (CustomReferenceTableViewCell *)nibItem; 
         } 
        } 
    } 
    

這種方法已經工作了,我在過去的8個月。我沒有理由可能會給你造成問題。

+0

如果我沒有將文件所有者設置爲自定義視圖,則無法掛接我的IBOutlet。 – pls 2014-10-28 12:05:19

+0

「將您的類CustomReferenceTableViewCell作爲該單元組件的自定義類。」 – avismara 2014-10-28 12:53:14

+0

給了你一個指出我不應該設置文件所有者的+1。 – pls 2014-10-28 14:04:47

2

嘗試設置你的static NSString *cellIdentifier = @"referenceCell";上述@interface And change registerNib place from WillAppear to viewDidLoad。你也可以改變細胞創建

CustomReferenceTableViewCell *cell = (CustomReferenceTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
if (cell == nil) { 
    cell = [[[NSBundle mainBundle]loadNibNamed:@"CustomReferenceTableViewCell" owner:self options:nil] lastObject]; 
} 
+0

這仍然會產生相同的錯誤。 – pls 2014-10-28 11:29:41

+0

您在單元格xib中設置重用標識符? – NilsHolgerson 2014-10-28 11:32:39

+0

我相信是的。在CustomReferenceTableViewCell.xib屬性下,我已經將它設置爲標識符。 – pls 2014-10-28 11:38:19

0

只要按照我的編碼爲您的應用程序

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"Reuse"]; 

    NSArray *nib=[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 

    if(cell == nil) 
    { 
     cell = [nib objectAtIndex:0]; 
    } 

    cell.number.text = @"1"; 

    cell.referenceName.text = @"Name"; 

    cell.reference.text = @"The text of the reference"; 

    return cell; 

    } 
+0

這將起作用。 – user3182143 2014-10-28 11:23:36

+0

嘗試此操作時出現以下情況:***因未捕獲異常'NSInternalInconsistencyException'而終止應用程序,原因:'無法在軟件包中加載NIB:'NSBundle <>(已加載)'名稱爲'referenceCell'' – pls 2014-10-28 11:24:56

+0

Superb.Now在編碼中給出refrenceCell而不是CustomCell。 – user3182143 2014-10-28 11:27:48

0

首先CodingVoldermort的答案幫助我解決了這個問題。我將文件所有者設置爲我不想做的自定義類。這應該保留爲NSObject。

我認爲需要更改的原因是因爲我無法通過按住控件並單擊佔位符下的tableview圖像並拖動到xib中的相應視圖來掛接我的IBOutlets。

相反,我需要在'顯示連接檢查器'窗格下並控制並單擊並從那裏拖動以使連接工作。然後我原來的發佈代碼將工作。

非常感謝所有的答覆傢伙。

+0

'[NSBundle mainBundle]'? – avismara 2014-10-28 16:28:40

+0

我的錯誤。它可以處理你的代碼。它一定是別的東西導致它崩潰。我已經接受你的答案。 – pls 2014-10-28 22:49:12