2015-10-01 1 views
1

Je suis sûr que je manque quelque chose de simple ici, mais je ne trouve pas la réponse bien que j'ai regardé dans les autres exemples ici, mon code semble être le même. J'essaie de définir une classe globale avec des méthodes auxquelles je peux accéder depuis les autres classes de mon projet. Je peux le définir, mais je ne peux pas accéder aux méthodes de mes autres classes, bien que j'importe toujours l'en-tête de la classe globale dans la classe où je veux utiliser la méthode. Heres le code: 1er Global def classe:Création d'un objectif global c classe

#import <Foundation/Foundation.h> 

@interface GlobalMethods : NSObject {} 

- (unsigned long long)getMilliSeconds:(NSDate*)d; 

- (NSDate *)getDateFromMs:(unsigned long long)ms; 

@end 

#import "GlobalMethods.h" 

@implementation GlobalMethods 

//SET DATE TO MILLISECONDS 1970 EPOCH 

- (unsigned long long)getMilliSeconds:(NSDate*)d 
{ 
    unsigned long long seconds = [d timeIntervalSince1970]; 

    unsigned long long milliSeconds = seconds * 1000; 


    return milliSeconds; 
} 

// GET DATE FROM MILLISECONDS 1970 EPOCH 

- (NSDate *)getDateFromMs:(unsigned long long)ms 
{ 
    unsigned long long seconds = ms/1000; 
    NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970: seconds]; 

    return date; 
} 


@end 

and then where I want to use my methods in another class: 

#import "GlobalMethods.h" 


// GET MILLISECONDS FROM 1970 FROM THE PICKER DATE 
    NSDate *myDate = _requestDatePicker.date; 

    milliSeconds = [self getMilliSeconds: myDate]; 

erreur est: Aucune interface visable pour viewcontroller déclare le sélecteur getMilliseconds.

Merci pour votre aide.

+3

Toutes les classes sont globales. Le terme "classe mondiale" n'a pas de sens. – matt

Répondre

3

Vous essayez d'appeler la méthode getMilliSeconds: (qui est une méthode d'instance de la classe GlobalMethods) sur une instance de votre classe de contrôleur de vue. C'est la cause de l'erreur.

Comme écrit vous devez modifier cette ligne:

milliSeconds = [self getMilliSeconds: myDate]; 

à:

GlobalMethods *global = [[GlobalMethods alloc] init]; 
milliSeconds = [global getMilliSeconds:myDate]; 

Une meilleure solution est d'abord changer toutes les méthodes d'instance de votre GlobalMethods classe à des méthodes de classe. En d'autres termes, dans les fichiers .h et .m pour GlobalMethods, remplacez le - par un + pour les deux méthodes.

Ensuite, dans votre contrôleur de vue que vous pouvez faire:

milliSeconds = [GlobalMethods getMilliSeconds:myDate]; 
+0

Merci rmaddy, en effet le second est la meilleure solution. Merci pour les apprentissages. – Kitcc