gpt4 book ai didi

iphone - "isEqualToString" cocoa 错误

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:37 24 4
gpt4 key购买 nike

我的控制台出现错误:

2009-05-30 20:17:05.801 ChuckFacts[1029:20b] *** -[Joke isEqualToString:]: unrecognized selector sent to instance 0x52e2f0

这是我认为错误来自的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Joke";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
reuseIdentifier:CellIdentifier] autorelease];
cell = tableCell;
}

NSString *jokeText = [jokes objectAtIndex:indexPath.row];
UILabel *jokeTextLabel = (UILabel*) [cell viewWithTag:1];
jokeTextLabel.text = jokeText;
NSString *dateText = formattedDateString;
UILabel *dateTextLabel = (UILabel*) [cell viewWithTag:2];
dateTextLabel.text = dateText;
[self todaysDate];
return cell;
}

“笑话”是一个充满笑话的数组,以防你需要知道

为什么会出现这个错误?

此外,您是否看到错误的部分:

sent to instance 0x52e2f0

如何确定“0x52e2f0”是什么,以便下次更容易找到问题?

最佳答案

Why is that error coming in?

因为您要将 isEqualToString: 发送到 Joke 对象,而您的 Joke 对象不响应 isEqualToString:

您可能不是有意向您的 Joke 对象发送该消息;相反,您将 Joke 对象传递或返回给需要 NSString 对象的对象。

你说 jokes 是一个“充满笑话的数组”。然而,在您的代码中,您这样做:

NSString *jokeText = [jokes objectAtIndex:indexPath.row];
UILabel *jokeTextLabel = (UILabel*) [cell viewWithTag:1];
jokeTextLabel.text = jokeText;

按照异常(exception)情况,我猜测“充满笑话的数组”是指“笑话对象数组”。

将笑话对象放入 NSString * 变量中不会将笑话对象变成 NSString。您所做的只是告诉编译器该变量包含一个 NSString,然后将一个 Joke 放入其中。我称之为“对编译器说谎”。

解决这个问题的第一步是消除谎言并恢复真相:

Joke *joke = [jokes objectAtIndex:indexPath.row];

如果您在执行此操作后立即编译,您会注意到编译器在几行之后开始给您警告:

jokeTextLabel.text = jokeText; 

warning: passing argument 1 of ‘setText:’ from distinct Objective-C type

当然是对的。笑话仍然不是 NSString。既然您对变量的类型很诚实,编译器就可以为您捕获它。

当您向 Joke 对象询问它的​​文本时(我假设它有一个属性,并且该属性的值是一个 NSString)并将 那个jokeTextLabel.text 二传手。

How can I determine what "0x52e2f0" is so it would be easier to find the problem next time?

在 Xcode 的断点窗口中,在 objc_exception_throw 上设置一个断点。然后运行你的程序。当异常发生时,调试器将停止您的程序,并打开调试器窗口。然后,在调试器控制台中键入 po 0x52e2f0。 (po 代表“打印对象”。)

这适用于 Mac 应用;我假设它也适用于 iPhone 应用程序。

关于iphone - "isEqualToString" cocoa 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com