Objective-c从类方法调用方法

时间:2017-01-18 11:09:31

标签: ios objective-c

我正在尝试从类方法访问实例方法。我收到此错误

  

+ [ActiveVC goToDashBoard]:无法识别的选择器发送到类0x112010

     

***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'+ [ActiveVC goToDashBoard]:   无法识别的选择器发送到类0x112010'

我的代码

+ (void) removeClosedVisitor:(NSString *) visitorID{

    for (NSInteger i = activelist.count - 1; i >= 0 ; i--) {
        ActiveItemObject *item = [activelist objectAtIndex:i];
        if ([visitorID isEqualToString:item.VisitorId]) {
            NSLog(@"Removing Visitor from Active List -- %@", visitorID);
            [activelist removeObjectAtIndex:i];
            //[self.incommingTable reloadData];

//            NSDictionary *activeDictionary = [[NSDictionary alloc] init];
//            activeDictionary = [activelist mutableCopy];
//            
//            [[NSNotificationCenter defaultCenter]
//             postNotificationName:@"PassData"
//             object:nil
//             userInfo:activeDictionary];

            [[self class] goToDashBoard];
        }
    }
}



- (void) goToDashBoard{
    NSLog(@"Segue to Dashboard");
    UITabBarController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"id_tabView"];
    [dvc setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
    [self presentViewController:dvc animated:YES completion:nil];

}

可以帮助我解决这个问题。 TNX。

4 个答案:

答案 0 :(得分:3)

您需要创建类的实例或将类转换为单例。例如:[[ActiveVC sharedInstance] goToDashBoard];

以下是创建Singleton类的方法:

首先,创建一个新文件并从NSObject继承它。无论如何命名,我们将在这里使用CommonClass。 Xcode现在将为您生成CommonClass.h和CommonClass.m文件。

CommonClass.h文件中:

#import <Foundation/Foundation.h>

@interface CommonClass : NSObject {
}
+ (CommonClass *)sharedObject;
@property NSString *commonString;
@end

CommonClass.m文件中:

#import "CommonClass.h"

@implementation CommonClass

+ (CommonClass *)sharedObject {
    static CommonClass *sharedClass = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedClass = [[self alloc] init];
    });
    return sharedClass;
}

- (id)init {
    if (self = [super init]) {
        self.commonString = @"this is string";
    }
    return self;
}

@end

答案 1 :(得分:0)

如果你想调用实例方法,那么你需要一个实例变量,所以创建这个类的实例变量并调用它。

答案 2 :(得分:0)

你真的在任何地方有一个实例吗?如果没有,你将不得不创建一个:

[self.sharedInstance goToDashBoard]

[[self alloc] init] goToDashBoard]

我假设你有一个实例,因为它看起来像一个视图控制器。在这种情况下,我建议您将实例传递给静态方法。

+ (void) removeClosedVisitor:(NSString *) visitorID viewController: (xxx) viewController {

答案 3 :(得分:0)

使goToDashBoard成为一种类方法。由于您没有在此创建任何实例,如果它不是类方法,则无法执行。

+ (void) goToDashBoard