我会在这个问题前面说,在谈到Objective-C时,我是一个完全的菜鸟。所以,请耐心等待我的问题。 :)
所以这是我的问题。我基本上允许用户通过使用alpha混合等“擦除”图像,然后将创建的纹理转换为CCSprite。然后我可以将CCSprite存储在我的单例类中的函数中。像这样:
erasedTextureSprite = [CCSprite spriteWithTexture:darknessLayer.sprite.texture];
[[MySingleton sharedMySingleton] setRevealTexture:erasedTextureSprite];
以下是setRevealTexture
& getRevealTexture
函数以及我的MySingleton.h
文件中的revealTexture变量初始化:
@interface MySingleton : NSObject
{
CCSprite *revealTexture;
}
...
-(void) setRevealTexture: (CCSprite *) texture;
-(CCSprite *) getRevealTexture;
以下是MySingleton.m
文件中的两个函数:
-(void) setRevealTexture: (CCSprite *) texture
{
NSLog(@"set reveal texture.");
revealTexture = texture;
NSLog(@"%f", [revealTexture boundingBox].size.width);
}
-(CCSprite *) getRevealTexture
{
NSLog(@"got reveal texture.");
NSLog(@"%f", revealTexture.contentSize.width);
return revealTexture;
}
如果我设置了揭示纹理,然后马上得到它,它似乎正确地返回精灵。但是,如果我设置纹理然后转换到另一个场景,它似乎失去了它的值,并在我尝试调用getRevealTexture
函数时抛出一个错误。
问题 :当我在场景之间转换时,为什么我的功能不会保留它的值?
如果需要进一步澄清,请告诉我们!
答案 0 :(得分:1)
如果你没有做任何花哨的话,实际上没有必要使用你自己的setter和getter。 你正在做的是使用一个应该是强大财产的iVar。
您可以通过以下方式实现相同目标:
@property (nonatomic, strong) CCSprite *revealTexture;
在您的头文件中。 然后,您将默认获得以下2个功能:
[[MySingleton sharedMySingleton] revealTexture];
[[MySingleton sharedMySingleton] setRevealTexture:texture];
我认为如果这不起作用我的下一个失败点就是你的单例函数不能正常工作而且每次实际获得一个新实例。 您可以通过在调试器中轻松找到它:
po [MySingleton sharedMySingleton]
查看每次返回的实例。
基本单例代码的示例:
static MySingleton *__sharedMySingleton = nil;
+ (id)sharedMySingleton {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
__sharedMySingleton = [MySingleton new]; // or a specific alloc init function
});
return __sharedMySingleton;
}
由于请求 - 这是一个简短的图片,解释如何在xcode 5中输入调试器命令: