2010-10-16 17 views
0

J'ai un singleton dans lequel je trouve un seul entier, mon score. Cependant, quand je le charge à partir du singleton dans une autre vue, il ne montre pas ce que je veux, mais il se fixe à un 6592960 câblé. Des idées pourquoi? Quelque chose à voir avec la façon dont j'utilise @property Im pensée, quelle est la bonne façon de @property un int?Singleton Entier Numéro

Merci.

EDIT: code: Singleton .h

#import <Foundation/Foundation.h> 


@interface scoreData : NSObject { 

    int score; 
} 

@property int score; 

+ (scoreData *)sharedData; 

@end 

Singleton .m

#import "scoreData.h" 


static scoreData *sharedData = nil; 

@implementation scoreData 

@synthesize score; 

#pragma mark - 
#pragma mark Singleton Methods 
+ (scoreData *)sharedData { 
    if(sharedData == nil){ 
     sharedData = [[super allocWithZone:NULL] init]; 
    } 
    return sharedData; 
} 
+ (id)allocWithZone:(NSZone *)zone { 
    return [[self sharedManager] retain]; 
} 
- (id)copyWithZone:(NSZone *)zone { 
    return self; 
} 
- (id)retain { 
    return self; 
} 
- (unsigned)retainCount { 
    return NSUIntegerMax; 
} 
- (void)release { 
    //do nothing 
} 
- (id)autorelease { 
    return self; 
} 

@end 

Dans mon autre point de vue, je l'accès comme cela et puis essayer de modifier le nombre et bien sûr je importer le singleton:

scoreData *score = [scoreData sharedData]; 
score.score = 0; 
+0

Essayez de revérifier vos types de données. – JoePasq

+1

Montrez votre code ... – Eiko

+0

Pouvez-vous poster le code? –

Répondre

0

MySingleton.h

#import <Foundation/Foundation.h> 

@interface MySingleton : NSObject { 

} 
@property(nonatomic,assign) int score; 
+ (MySingleton*) sharedInstance; 

@end 

MySingleton.m

#import "MySingleton.h" 

static MySingleton *_instance; 
@implementation MySingleton 
@synthesize score; 

+ (MySingleton*)sharedInstance 
{ 
    @synchronized(self) { 
     if (_instance == nil) { 
      _instance = [[super allocWithZone:NULL] init]; 
     } 
    } 
    return _instance; 
} 

#pragma mark Singleton Methods 
+ (id)allocWithZone:(NSZone *)zone 
{ 
    return [[self sharedInstance]retain]; 
} 

- (id)copyWithZone:(NSZone *)zone 
{ 
    return self;  
} 

- (id)retain 
{ 
    return self;  
} 

- (unsigned)retainCount 
{ 
    return NSUIntegerMax; 
} 

- (void)release 
{ 
} 

- (id)autorelease 
{ 
    return self;  
} 

@end 

modifier
Voir ce xcode-template pour simplifier génération singleton.

0

Si c'est un vrai singl Eton, alors vous pouvez avoir votre getter et setter simplement accéder directement à une variable globale statique initialisée, et passer tout le temps d'exécution alloué et la zone occupée.

+0

Pourriez-vous élaborer s'il vous plaît? Im assez nouveau aux singletons. –

+0

Si vous n'avez pas besoin d'un message pour singleton, vous pouvez utiliser directement une variable globale C pour les types de données intrinsèques. – hotpaw2

0

Je voudrais écrire la @property comme ceci:

@property (nonatomic,assign) int score; 

i changerais aussi sharedData:

+ (scoreData *)sharedData { 
    if(sharedData == nil){ 
     sharedData = [[self alloc] init]; 
    } 
    return sharedData; 
} 

Edit: J'ai essayé votre code et obtenu EXC_BADACCESS parce qu'il est allé récursive ici:

+ (id)allocWithZone:(NSZone *)zone { 
    return [[self sharedManager] retain]; 
} 

Lorsque j'ai supprimé cette méthode tout a fonctionné comme prévu éd.

+0

Pas une telle chance, encore un étrange nombre de longs similaires à l'origine affiché. –

+0

Peut-être que vous pouvez utiliser NSNumber à la place, mais vous ne devriez pas avoir à le faire. Je ne comprends pas pourquoi ça ne marche pas, bizarre! – aegzorz

+1

Josh comment imprimes-tu le numéro? Peut-être votre format d'impression ou de NSLog vous montre-t-il incorrectement le mauvais résultat ... – twerdster