-1

情况如下:我创建了一个自定义视图类,其中 UITextView 作为其成员。在某些事件发生后,我将 textView 作为第一响应者。

@inteface MyCustomView : UIView{
   UITextView* textView;
}

- (void) doSomething;

@end

在程序执行期间,我向 MyCustomView 的实例发送 [doSomething] 消息。

[myCustomViewInstance doSomething];

发生的事情非常有趣,程序因抱怨 UITextView:doSomething 是无法识别的选择器而崩溃。

为什么程序在 UITextView(它的成员变量)而不是 MyCustomView 的实例上调用 doSomething。

这里可能有什么问题?(当然,这是我正在做的事情的规范版本,但我不明白在任何逻辑错误情况下这可能是真的,除非在编译器级别搞砸了)

你认为我应该进一步调查什么?

4

1 回答 1

3

首先,Objective-C 没有“成员”变量,它有实例变量。小事;但术语确实很重要。

其次,崩溃正在发生,因为myCustomViewInstance它指向的是一个实例,UITextView而不是你的子类。这可能是因为您无意中进行了这样的分配,或者可能是因为您遇到了过度释放问题,并且碰巧所述变量最终巧合地指向了错误的对象。

最后,虽然肯定存在编译器错误,但如此简单的代码极不可能揭示迄今为止未知的编译器错误。您使用的编译器与用于编译操作系统数百万行代码的编译器完全相同;这样一个简单的错误很可能意味着没有应用程序可以运行,或者很可能设备甚至无法启动。

假设所述代码行实际上是崩溃的。

于 2012-05-20T00:25:50.020 回答