2012-03-15 31 views
8

Tôi đã xem xét hầu hết các câu hỏi liên quan về điều này ở đây trong stackoverflow và đã thử tất cả các giải pháp có thể của họ nhưng tôi vẫn không thể hiểu tại sao tôi nhận được lỗi này:Lớp con UITableViewCell tùy chỉnh: Lớp này không phải là giá trị khóa tuân thủ

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

Tôi đang cố tải ô xem bảng tùy chỉnh bằng nibname: @ "CustomCell". Lớp của nó được gán cho "CustomCell" (cùng tên lớp với tên nib). Chủ sở hữu tệp của nó cũng được đặt thành lớp tải các ô này - "ProductsTableViewControllerWithSearch". Tất cả các cửa hàng trong nib được kết nối với những người thân trong CustomCell.m

Dưới đây là mã của tôi:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellClassName = @"CustomCell"; 
    static NSString *CellIdentifier = @"Custom Items Cell"; 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 

     NSArray *topLevelItems = [[UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]] instantiateWithOwner:self options:nil]; 
     cell = [topLevelItems objectAtIndex:0]; 

    } 
//... more irrelevant code here 
} 

ai đó có thể giúp tôi xin vui lòng. Tôi đã làm việc này trong hơn 4 giờ. Cảm ơn rất nhiều!

PS: Tôi đang sử dụng ARC và đang phát triển cho iOS 5.

Đây là CustomCell.h của tôi.

#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell{ 
    UILabel *textLabel; 
    UILabel *detailTextLabel; 
    UIButton *starButton; 
} 

@property (strong, nonatomic) IBOutlet UILabel *textLabel; 
@property (strong, nonatomic) IBOutlet UILabel *detailTextLabel; 
@property (strong, nonatomic) IBOutlet UIButton *starButton; 

@end 

Không có gì trong CustomCell.m tôi

+0

CustomCell là lớp con của? – JoePasq

+0

@JoePasq UITableViewCell. – acecapades

Trả lời

10

Trong Interface Builder bạn cần phải thiết lập các lớp của tế bào để CustomCell và CustomCell là cần phải có một tài sản title.

this class is not key value coding-compliant for the key …

Thường có nghĩa là không tìm thấy thuộc tính trên lớp và Trình tạo giao diện đang cố sử dụng thuộc tính đó, dẫn đến sự cố.

+0

Vâng, tôi đã đặt lớp CustomCell.xib thành CustomCell ...Đó là lý do tại sao tôi có thể kết nối tất cả các UILabels trong CustomCell.m. – acecapades

+0

tại sao cần phải có tiêu đề "tài sản"? – acecapades

+1

… Tôi không biết. Hmm. Đối với chế độ xem "lớn lên" thường mọi người đều có tiêu đề, tôi không biết khi nào/nơi các ô xem bảng sử dụng tiêu đề của chúng. – JoePasq

5

Tôi giả sử bạn nhận được lỗi này khi ô của bạn được tải từ NIB khi chạy. (Nếu thay vào đó nó vi phạm trên một số dòng mã bạn đã viết, vì lợi ích của Thiên Chúa xóa dòng mã đó!)

Chuyển đến chế độ xem XIB của ô tùy chỉnh, nhấp vào "Chủ sở hữu tệp" và hủy liên kết kết nối bạn đã có trong đó được gọi là 'tiêu đề'. Nếu bạn đang cảm thấy căng thẳng, hãy hủy liên kết mọi thứ, sau đó liên kết lại nội dung bạn muốn. Xem có xóa nó không. Nếu không, tôi sẽ ở đây vài giờ.

+1

Chiến lược tốt — xem liệu thuộc tính ‘title’ * có được kết nối không. – JoePasq

+0

Điều này gần như luôn luôn là nguyên nhân trong trường hợp này! – lnafziger

+0

Vâng, ô được tải từ thời gian chạy NIB. Nó hoạt động ngay bây giờ khi tôi khai báo một thuộc tính được gọi là 'title' trong tập tin header. Tôi không biết rằng một tài sản được gọi là tiêu đề phải được tuyên bố. Cảm ơn @JoePasq. Tôi không thấy điều đó trong tất cả các câu hỏi khác liên quan đến câu hỏi này ở đây trong StackOverflow. – acecapades

13

Lỗi này xảy ra nếu bạn đang liên kết mọi thứ không thuộc về chế độ xem đó.

Trong trường hợp này, giải pháp là trong giao diện Builder

  1. Đầu Thay đổi Chủ đầu tư nhận dạng lớp của File để NSObject.
  2. Hủy liên kết mọi IBOutlet trong Chủ sở hữu tệp.
  3. Thay đổi Lớp nhận dạng của NIB tùy chỉnh của bạn thành tên của lớp CustomTableViewCell.
  4. Liên kết tất cả IBOutlet của bạn tại đây.

Vậy đó.

+0

Nếu bạn đang tải nib trực tiếp trong mã ViewController của mình và muốn có thể viết mã sau đây. 'MyCustomCell * cell; cell.customTextField.text.delegate = self; 'Điều này sẽ làm việc cho bạn. Ngoài ra tôi nghĩ rằng nó có ý nghĩa hơn các câu trả lời hiện tại khác. –

+7

UILabels của CustomTablecell của bạn nên được kết nối với đối tượng UITableViewCell, chứ không phải chủ sở hữu của Tệp. Tôi quên điều này mọi lúc. Tôi không chắc tại sao. – user798719

+0

Đây phải là câu trả lời được chấp nhận ở đây - ít nhất nó đã giải quyết được vấn đề tôi gặp phải. – Gereon

0

Đối với trường hợp của tôi về XCode6.0.1, tôi làm sạch dự án và mọi thứ chạy trơn tru

Các vấn đề liên quan