2012-01-07 64 views
1

我有一个访问我的Singleton类属性的问题。 我已经写了这个代码:Singleton.h -cocos2d中的单例类。访问变量

#import <Foundation/Foundation.h> 

@interface Singleton : NSObject{ 
    int _wordNumber; 
} 
+ (Singleton *) sharedSingleron; 
@property (readwrite) int wordNumber; 
@end 

Singleton.m文件 -

#import "Singleton.h" 
@implementation Singleton 
@synthesize wordNumber = _wordNumber; 


static Singleton* _sharedSingleton = nil; 

+(Singleton *) sharedSingleron{ 
    @synchronized([Singleton class]) 
    { 
     if (!_sharedSingleton) 
      [[self alloc] init]; 

     return _sharedSingleton; 
    } 

    return nil; 
} 
+(id)alloc 
{ 
    @synchronized([Singleton class]) 
    { 
     NSAssert(_sharedSingleton == nil, @"Attempted to allocate a second instance of a singleton."); 
     _sharedSingleton = [super alloc]; 
     return _sharedSingleton; 
    } 

    return nil; 
} 

-(id)init { 
    self = [super init]; 
    if (self != nil) { 

    } 

    return self; 
} 


@end 

在我的第一个场景我设置wordNumber并转到另一个场景

[Singleton sharedSingleron].wordNumber = wordNum; 
[[CCDirector sharedDirector] replaceScene: [CCTransitionFlipAngular transitionWithDuration:0.3 scene:[WordsLayer node]]]; 

并在WordsLayer.m我试图得到这个属性

-(id) init 
{ 
    if((self=[super init])) { 

     int wordNum = [Singleton sharedSingleron].wordNumber; 

    } 
    return self; 
} 

但wordNum有错误的值。请帮助我找到一个错误。

+0

尝试添加到性能的实现(单班)的NSLog当前值。我认为它可以帮助你。 – OdNairy 2012-01-07 21:40:52

+1

你从未设置_sharedSingleton .... – 2012-01-08 03:01:28

回答

3

也许尝试:

+(Singleton *) sharedSingleron{ 
    @synchronized([Singleton class]) { 
    if (!_sharedSingleton) 
     _sharedSingleton = [[self alloc] init]; 

    return _sharedSingleton; 
    } 
    return nil; 
} 
+0

它没有帮助。当我尝试在Singleton类中获得wordNumber时,wordNumber属性也有不好的值...可能是属性描述中的问题? – nabiullinas 2012-01-08 08:28:59

+0

哦,这个解决方案是正确的。我发现一个错误。 – nabiullinas 2012-01-08 08:40:18

+1

你写的代码来自“学习Cocos2D:使用Cocos2D,Box2D和Chipmunk构建IOS游戏的实践指南”一书,第7章,第172-175页。我发现这篇文章是因为我遇到了同样的问题。看来这是本书中的一个错误。 @YvesLeBorg的解决方案也适用于我。 – Ben 2012-07-13 07:53:03