gpt4 book ai didi

objective-c - 无法识别的选择器发送到实例,但我不明白为什么

转载 作者:行者123 更新时间:2023-11-29 11:16:04 26 4
gpt4 key购买 nike

这是我的 friend 在测试我的应用程序时遇到的错误,但我无法重现它。我将从代码开始:

传输频率.h

@interface TransferFrequency : NSObject
- (BOOL)isImmediate;
// Other details...
@end

传输频率.m

@implementation TransferFrequency
// Other details...
- (BOOL)isImmediate
{
return YES;
}
@end

转账.h

@interface Transfer : NSObject
@property (nonatomic, retain) TransferFrequency* frequency;
// Other details...
@end

转移.m

@implementation Transfer
@synthesize frequency;
// Other details...
@end

创建传输 View .h

@interface CreateTransferView : UITableViewController
@property (nonatomic, retain) Transfer* transfer;
// Other details...
@end

创建传输 View .m

@implementation CreateTransferView
@synthesize transfer;

// Other details...

- (void)confirmButtonTouched
{
// The crash happens on the following line, as confirmed by stack trace
if([self.transfer.frequency isImmediate])
// Do some stuff
}
@end

当用户触摸确认按钮时,调用 confirmButtonTouched。这是我 friend 遇到的错误:

-[TransferFrequency isImmediate]: unrecognized selector sent to instance 0xeec6db0

在我看来,选择器 isImmediate 是在合法的 TransferFrequency 对象上调用的,但 iPhone 说它找不到该选择器。

实际上有几部 iPhone 向我报告了这个错误,但我无法物理访问其中任何一部,所以我只能远程调试。我自己的 iPod touch、iPhone 和 iPhone 模拟器都运行良好。

关于可能导致此问题的任何想法?

最佳答案

首先,如果您使用断点运行调试器,您能否确认在调用 confirmButtonTouch 时 self.transfer 实际已分配并表示 Transfer 的实例?

我的想法:

1) 您正在命名一个以“Create”开头的类。 Create 带有方法名称的约定,因此我尽量避免在一般情况下使用它(除非我特别想遵守约定)。

2) 您可以尝试隔离您的 ivar 名称并显式分配它们:@synthesize *aTransfer = __aTransfer;

我在这里的动机是在某个地方/如何将类与实例混合在一起并与属性混合......你有几个相似的名字被抛来抛去,我会尽可能地隔离所有东西,因为我没有发现任何其他问题...您可能会遇到一些名称冲突。

关于objective-c - 无法识别的选择器发送到实例,但我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9382994/

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