我正在研究一个有一个方法的类A - (void)DoSmthing1。我打电话给 另一个方法 - (void)类B中的DoSmthing2。现在在B类中执行一些操作之后,该方法应该回调一个方法 - (void)DoSmthing3上一个类。
我如何从另一个类调用当前类的方法?有人可以帮帮我....
提前致谢
EDIT1 :: 我的代码: A类
{
-(void) MethodA {
}
-(void) MethodB {
ClassB *clsB = [[ClassB alloc] init];
[clsB MethodC];
}
}
B类
{
-(void)MethodC:(selector) {
//here i want to call MethodA of classA, and i will prefer if it is possible by sending the name of the method as selector in this method(methodC)
}
}
EDIT2 ::
我想做的另一个例子就像下面这样:
ClassB *b = [[ClassB alloc] nitWithTarget:self selector:@selector(methodfromClassA) object:nil];
这里我想在完成B类中的某个任务后调用A类的方法,并且也要从A类调用。
我希望现在很清楚。
EDIT3:
- (void)loadView {
AsyncConnection *async =[[AsyncConnection alloc] init];
[async getAsync:self callback:@selector(test1)];
}
以上代码来自第一类
-(void)getAsync:(id)anObject callback:(SEL)selector {
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:anObject
selector:@selector(selector)
object:nil];
[queue addOperation:operation];
[operation release];
}
以上代码来自第二类。在这里,我想调用一个作为选择器传递的第一类方法。
答案 0 :(得分:2)
听起来您会从阅读介绍材料中受益:The Objective-C Programming Language和Cocoa Fundamentals Guide。此外,您应该阅读面向对象编程的基础知识(在整个网络和亚马逊上有几十个概述)。
基本上,你会混淆一个类(创建一个对象的蓝图,在其最基本的描述中)和一个类的实例(一个给定类的实际“实例化”对象)。在某个地方,您将不得不从一个实例引用另一个实例(如objectB = [[ClassB alloc] init])来发送消息(如[objectB doSomethingAnObjectOfClassBWouldDo])。您可以通过将引用存储为实例变量或存储在集合(数组,字典等)中来实现此目的,该集合是需要“记住”需要与之交谈的类的实例变量。
在你学会用这个平台爬行之前,要意识到你正试图走路是非常重要的。唯一的治疗方法就是学习。很多。 Guided books帮助。
答案 1 :(得分:2)
- (void)loadView {
AsyncConnection *async =[[AsyncConnection alloc] init];
[async getAsync:self callback:@selector(test1)];
}
其他课程:
-(void)getAsync:(id)anObject callback:(SEL)selector {
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:anObject
selector:@selector(selector)
object:nil];
[queue addOperation:operation];
[operation release];
}
首先,如果您要使用上述模式,请从@selector()
中删除@selector(selector)
。您已经拥有选择器。执行@selector(selector)
将创建名为SEL
的{{1}},而不是作为参数传入的选择器。
接下来,这似乎是一个奇怪的模式开始;它会起作用,但任何经验丰富的Obj-C / iOS / Cocoa开发人员都会看到它。由于您编写了selector
类,因此请使用委托模式。即在实现AsyncConnection
的类中。
即,在AsyncConnection.h中:
loadView
然后:
@property(retain) ClassA *callbackHandler;
然后,在AsyncConnection中,您将直接将回调处理程序称为- (void)loadView {
AsyncConnection *async =[[AsyncConnection alloc] init];
[async setCallbackHandler: self];
}
(或self.callbackHandler
)。
答案 2 :(得分:1)
然后新方法: 应该是这样的:
classB.h
classA *aObj;
@property(nonatomic, retain) classA *aObj;
classB.m
@synthetize aObj;
classA.m
// after init class b obj
[bOjb setAObj:self];
classB.m
[aObj whateverMethodOfClassA];
如果不清楚,请告诉我。
我的消化是,通常如果你想避免真正的混乱和调试的噩梦,你应该使用观察者和通知而不是这种交叉方法调用。
使A类成为B类通知的观察者:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(classA-method-name:) name:@"notification-name" object:class-B-object ];
当在B级准备好时,用parms通知A级:
[[NSNotificationCenter defaultCenter] postNotificationName:@"notification-name" object:self];
只是一个想法。
答案 3 :(得分:0)
一种选择是在Objective C中使用delegate pattern。让A类的对象将自己传递给B类的对象作为某些方法的处理程序。