我正在尝试从类方法访问实例方法。我收到此错误
+ [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。
答案 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