【问题标题】:How to call method of other class?如何调用其他类的方法?
【发布时间】:2013-12-26 07:02:24
【问题描述】:

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

最初我的根是 A 类。因此,从 Class-A 开始,我正在展示 Class-B,通过使用 class B.delegate = self,我在 Class-A 中调用 Class-B 委托方法。而且Class-B和Class-C之间也没有联系。那么,如果我从 C 类到 A 类,那么有可能再次调用相同的 B 类委托方法吗?

我想在 Class-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"];
}

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

【问题讨论】:

  • 您尝试过通知吗?
  • @Konstantin 感谢您的回答,但我没有使用通知。它将如何在这里工作?
  • 最好的设计模式是组合,它允许多个对象一起工作以构建一个更大的系统,并且是 OOP 的基本概念。看看这个例子link
  • 也许这个link会帮助你)
  • @Konstantin但是 class-C 委托方法将如何在 Class-A 中调用?我如何传递 Class-C 的引用?

标签: ios iphone methods delegates


【解决方案1】:

你可以这样做

- (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 

那么在你的classB中你可以这样做

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

这将允许您轻松访问classAs 方法和属性。我已将userData 作为共享属性的示例。如果您在一个类中设置userData,您将能够在另一个类中轻松访问userData 的实例。

如果您有任何问题,请提出。

【讨论】:

  • @Popeye谢谢你给我时间。你能检查我更新的问题吗?
  • 是的,单身人士可以在你想要的地方工作。使用与我在回答中所做的相同的方式,您应该能够很容易地实现这一点。如果您还有其他需要,请尽管问。
【解决方案2】:

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

单例 (singleton.h)
@property (nonatomic) BOOL isReturningFromClassC;

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

A 类
if([singletonInstance setIsReturningFromClassC]) // 调用委托

  • singletonInstance 是单腿的共享实例

【讨论】:

  • @Ravi 你说的机制是什么意思?我尝试过使用单例。
  • 然后定义一个变量并根据需要设置它的开/关。就像你可以在去Class-A过程中的最后一个动作在Class-C中设置它,并在Class-A中检查变量是否打开。如果变量打开,则调用委托。
  • @RaviSisodia 我不确定我是否理解你的意思。请分享一些代码来解释你的答案。
  • Anand Gautam:使用单例类与我告诉你的“共享实例”是一回事。
  • 还是不明白你在说什么。为什么需要设置布尔标志。
猜你喜欢
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多