如何调用其他类的方法?

时间:2013-12-09 08:19:15

标签: ios iphone methods delegates

我正在开发反馈类型的iPhone应用程序。在那里我因为从其他班级获得价值而陷入困境。假设我有三个视图控制器类“Class-A”,“Class-B”和“Class-C”。我已经为B级和C级创建了代表。

最初我的根是A级。所以从A类,我提出了Class-B,并且通过使用类B.delegate = self,我在Class-A中调用了Class-B委托方法。并且B类和C类之间也没有联系。那么,如果我将从Class-C转到Class-A,那么同样的Class-B委托方法会再次调用吗?

我想在A类中调用的方法是 -

-(void)saveAllVisitOptions:(SignIn *)signIn
{
    Store *store1 = [[Store alloc] init];
    store1.signINN  =[[SignIn alloc] init];
    store1.signINN = signIn;
    [resultArray replaceObjectAtIndex:indexValue withObject:store1];

    [Util setArrayPreference:resultArray forKey:@"Store"];
}

因此,如果我将上述方法使用单例,那么它会正常工作吗? 我已经搜遍了所有但无法找到解决方案。

2 个答案:

答案 0 :(得分:0)

您必须定义一些机制来知道控件从Class-C转到Class-A,使用类的共享实例或在NSUserDefaults中保存条目,然后从Class-A触发委托方法。

Singleton (singleton.h)
@property(nonatomic)BOOL isReturningFromClassC;

Class-C 中,设置
[singletonInstance setIsReturningFromClassC:YES];

A级
if([singletonInstance setIsReturningFromClassC]) //呼叫代表

  • singletonInstance是sinlegton的共享实例

答案 1 :(得分:0)

你可以这样做

- (void)someMethodYouCallInClassA
{
    // Simple and some may call none efficient way.
    // Personally not sure why some call it none efficient.
    ClassB *myClassB = [[ClassB alloc] init];
    [myClassB someMethodYouCallInClassB];
}

或者你可以使用许多人会说的单身人士。要做到这一点

ClassA.h

@interface ClassA : NSObject

@property (nonatomic, strong) NSData *userData;

+ (ClassA *)sharedInstance;
- (void)myMethodInClassA
@end

ClassA.m

#import ClassA.h

@implementation ClassA

@synthesize userData = _userData;

static ClassA *classASharedInstance = nil;

+ (ClassA *)sharedInstance
{
    static dispatch_once_t instanceToken;
    dispatch_once(&instanceToken, ^{
         classASharedInstance = [[ClassA alloc] init];
    });
    return classASharedInstance;
}

- (void)myMethodInClassA
{ 
     // Do what it is want
}

@end 

然后在你的课堂B中你可以做到

 - (void)method....
 {
     ClassA *myClassA = [ClassA sharedInstance]; // If the instance has already been set then no need to do this again.
     [myClassA myMethodInClassA];
 }

这将允许您轻松访问classA的方法和属性。我已将userData作为共享属性的示例。如果您在一个班级中设置userData,则可以轻松地在另一个班级中访问该userData的实例。

如果您有任何疑问,请询问。