我有一些单身人士在objective-c问题。虽然我没有在objective-c中看到过这样的例子,但我决定使用singleton来促进ViewController之间的通信。据我所知,这不是视图控制器之间进行通信的鼓励方式,但我想我会给它一个镜头。单身人士和铸造“自我”Objective-C
所以,我单身,我有:
+(FirstViewController*) getInstance;
在头文件中定义。这将允许外部呼叫者到达它。实现如下:
static FirstViewController* _instance;
+(FirstViewController*) getInstance
{
//I assume there will be only one copy of this throughout the project, so
//pointer confusion is not an issue here, hens it being a singleton
if (_instance == nil)
{
_instance = (FirstViewController*)self;
}
return _instance;
}
第一个暗示,这可能会导致麻烦的是,Xcode的抱怨,我设置的实例指针自我。警告是:
Incompatible pointer types assigning to "FirstViewController*" from 'class'
好吧,警告指出,看起来像我试图将一个指针应用到另一个。将它投射到FirstViewController会使警告消失(因为它现在是正确的指针类型),但记住这可能是未来可能出现的问题的根源,这并没有什么坏处。
在FirstViewController我有一个函数
-(void)assignWord:(NSString *)w
我应该能够通过单一实例才能到这一点。在我的第二个视图控制器中,我通过以下方式调用:
FirstViewController* controller = [FirstViewController getInstance];
[controller assignWord:string];
但是,这最终会崩溃。更具体地讲:
就是这个很奇怪+[FirstViewController assignWord:]: unrecognized selector sent to class
一件事是,它试图把这个作为一个静态函数,而不是一个实例中。
在调试过程中,通过此步进,我注意到另一件事,就是_instance变量保持为零,当我断点设置为单例的回归
self Class FirstViewController 0x0000000100006b98
_instance SecondViewController * nil 0x0000000000000000
一件事是有点奇怪是_instance被视为SecondViewController;我的猜测是这与调用者有关。
我不经常做objective-c。有没有其他人遇到过这个?有什么想法,为什么我得到奇怪的行为? (是调试器足够可靠?)
注:正在传递的字符串的指针是一个有效的NSString
'self'不会是'FirstViewController *'在一个类的方法(这是完全错误说什么)。不要抛弃指针错误。 – sapi
不是Xcode的问题。 --------阅读一个基本的Objective-C教程:你会发现在类的方法里,'self'指的是类。 (无论如何,在没有实例的情况下,它可能指的是一个实例吗?) – 2013-09-29 08:28:40
谈论蠢事。我把自己放在一个静态的方法中,呜呼!已经晚了 –