2017-01-18 180 views
0

我想從類方法訪問實例方法。我收到此錯誤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。

+1

' - (void)goToDashBoard'是一個實例方法。如果你想使它成爲一個類方法,不帶實例的可訪問性,將簽名更改爲'+(void)goToDashBoard' – NSNoob

回答

0

如果你想調用實例方法,那麼你將需要一個實例變量,所以創建這個類的實例變量並調用它。

0

實際上你是否有一個實例?如果沒有,你必須創建一個:

[self.sharedInstance goToDashBoard] 

[[self alloc] init] goToDashBoard] 

我假設你有一個實例,因爲它看起來像它的視圖控制器。在這種情況下,我建議你將該實例傳遞給靜態方法。

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

您需要創建您的類的實例或將您的類轉換爲單例。例如:[[ActiveVC sharedInstance] goToDashBoard];

下面是如何創建一個單獨的類:

首先,創建一個新的文件,並從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 
0

goToDashBoard一個類的方法。既然你沒有在這裏創建任何實例,如果它不是一個類方法,那麼它不能被執行。

+ (void) goToDashBoard