2010-10-15 39 views
5

Tôi đang cố gắng tạo chế độ xem bảng tùy chỉnh bằng cách sử dụng ô mà tôi đã tạo trong IB. Tôi gặp phải một lỗi lạ:Lỗi UITableViewCell tùy chỉnh

<BroadcastViewController 0x4b4f5f0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key postText. 

Mọi thứ được nối đúng trong IB với bộ điều khiển tế bào. Không thực sự chắc chắn tại sao điều này xảy ra.

Đây là những gì cellForRowAtIndexPath của tôi trông giống như:

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

//Get the folder object of interest 
Broadcast *messageAtIndex = [self.messages objectAtIndex:indexPath.row] ; 

static NSString *CellIdentifier = @"BroadcastTableViewCell"; 
static NSString *CellNib = @"BroadcastTableViewCell"; 

BroadcastTableViewCell *cell = (BroadcastTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    //ERRORING ON THIS LINE... 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil]; 
    cell = (BroadcastTableViewCell *)[nib objectAtIndex:0]; 
} 


cell.postText.text = messageAtIndex.replyText; 
cell.authorName.text = messageAtIndex.postCreatorFirstName; 
cell.postDate.text = messageAtIndex.creationDate; 

return cell; 

} 

Bất cứ ai nhìn thấy loại hình báo lỗi trước? Hãy cho tôi biết nếu bạn cần thêm bất kỳ thông tin nào ...

+0

Cần mã hoàn chỉnh cho hàm cellForRowAtIndexPath – SegFault

+0

Đã được cập nhật. – gabaum10

+0

Có vẻ như bạn đang cố gắng chèn một giá trị cho 'postText' vào thứ gì đó không phải là một NSDictionary? :) – willcodejavaforfood

Trả lời

5

là gì thực sự kỳ lạ là nó than phiền rằng lớp BroadcastViewController không KVC phù hợp để postText.

Theo như tôi thấy, postText là nhãn trong ô của bạn, vì vậy IBOutlet cho mục này phải ở trong lớp BroadcastTableViewCell. Vì vậy, hãy kiểm tra nơi bạn đã liên kết nhãn postText trong IB. Ngoài ra, nó có thể là bạn đã có một IBOutlet trong bộ điều khiển xem của bạn cho nhãn này, bạn đã gỡ bỏ nó nhưng bạn quên xóa liên kết trong IB. Dù sao, có một nơi nào đó là vấn đề của bạn. Thực tế là bạn có lỗi trên dòng đó chỉ vì nó có bạn tải NIB của bạn, nó không có bất cứ điều gì để làm với các tế bào chính nó hoặc với chủ sở hữu.

+0

Được rồi, tôi đã kiểm tra và kiểm tra kỹ các kết nối IB. Mọi thứ đều được kết nối đúng cách trong lớp BroadcastTableViewCell. Không có kết nối kéo dài đến bất kỳ bộ điều khiển xem nào khác ... Nó thực sự chẳng có ý nghĩa gì cả ... – gabaum10

+0

Bạn hiểu rồi. Đó là một cái gì đó trong nib. – gabaum10

1

Có thể có một số việc cần làm với dequeueReusableCellWithIdentifier trả lại UITableViewCell *.

tôi normaly làm điều này:

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier... 
CustomCell* acell = (CustomCell*)cell; 

Đặt chủ sở hữu để nil.

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:nil options:nil]; 
+0

Ok tôi thấy cách đúc đó sẽ là một ý tưởng tốt, nhưng điều đó vẫn không giúp được tải ban đầu, khi ô đầu tiên là không. Cần một cái gì đó để xử lý: "if (cell == nil)" – gabaum10

+0

Sau khi nhìn vào đó, đó là khá nhiều chính xác những gì tôi làm bây giờ, chỉ là một cách lâu hơn để đặt nó ... – gabaum10

+0

NSArray * nib = [[NSBundle mainBundle] loadNibNamed: Chủ sở hữu CellNib: nil options: nil]; Đặt chủ sở hữu thành không. –

1

Ok đã tìm ra. Các kết nối trong IB thực sự không chính xác. Tôi đã cho họ liên kết với chủ sở hữu của tập tin như trái ngược với các đối tượng thực tế. Tôi sẽ cung cấp cho điều này quá Stelian vì ông chỉ đạo tôi để kiểm tra ngòi. Cảm ơn tất cả sự giúp đỡ của bạn!

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