尝试将参数传递给void时由无法识别的选择器导致的错误

时间:2015-07-01 11:38:25

标签: ios objective-c view selector

感谢Stack的开发人员,我能够发现我之前问题的起源,这个问题发生在我的应用程序的另一个文件中(我正在写一篇新文章)。

我正在尝试编写聊天应用程序以获得乐趣,我编写了一个自定义视图类来显示所有已发送和已接收的消息。我在以下代码行中使用viewWithTag在我的主视图控制器中调用此类:MessageView *messageView = (MessageView *)[cell viewWithTag:MESSAGE_VIEW_TAG];。 MessageView类有一个名为transcript的属性,包含消息的所有信息。我还在主视图控制器中设置了MessageView类的transcript属性。但是,我在MessageView的实施文件中使用它时遇到了问题。

我收到了错误Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell setTranscript:]: unrecognized selector sent to instance 0x7fc77afe1070',我并不理解......这是我的setTranscript方法(不读取所有内容,我认为错误只来自第一个线)。

- (void)setTranscript:(Transcript *)transcript
{
// Set the message text
NSString *messageText = transcript.message;
_messageLabel.text = messageText;

// Compute message size and frames
CGSize labelSize = [MessageView labelSizeForString:messageText fontSize:MESSAGE_FONT_SIZE];
CGSize balloonSize = [MessageView balloonSizeForLabelSize:labelSize];
NSString *nameText = transcript.peerID;
CGSize nameSize = [MessageView labelSizeForString:nameText fontSize:NAME_FONT_SIZE];

// Comput the X,Y origin offsets
CGFloat xOffsetLabel;
CGFloat xOffsetBalloon;
CGFloat yOffset;

if ([transcript.direction isEqualToString:@"right"]) {
    // Sent messages appear or right of view
    xOffsetLabel = 320 - labelSize.width - (BALLOON_WIDTH_PADDING / 2) - 3;
    xOffsetBalloon = 320 - balloonSize.width;
    yOffset = BUFFER_WHITE_SPACE / 2;
    _nameLabel.text = @"";
    // Set text color
    _messageLabel.textColor = [UIColor whiteColor];
    // Set resizeable image
    _balloonView.image = [self.balloonImageRight resizableImageWithCapInsets:_balloonInsetsRight];
}
}

从我在调试器区域中收到的警告消息,我认为我的标题中没有正确定义脚本(我在实现中谨慎导入)。所以这就是我的头文件的样子:

#import <UIKit/UIKit.h>
#import "Transcript.h"
@class Transcript;
#define MESSAGE_VIEW_TAG (99)
@interface MessageView : UIView
@property (nonatomic, strong) Transcript *transcript;
@end

有谁知道我收到此错误消息的原因?我的论点,成绩单有什么问题?非常感谢您提前!!

2 个答案:

答案 0 :(得分:1)

看起来你在UITableViewCell中调用setter,但是应该在MessageView中调用。 你能展示用来调用“setTranscript”的代码吗?

答案 1 :(得分:1)

似乎你有一个自定义的tableview单元格,你在其中编写了一个属性Transcript,它有一个setter setTranscript。

似乎你在cellForRowAtIndexPath中dequeueReusableCellWithIdentifier方法返回的是UITableViewCell而不是你自定义的单元格。

因此,尝试在表视图中设置单元格的标识符,并在cellForRowAtIndexPath中检索具有相同标识符的单元格。