2011-04-14 7 views
1

나는 레벨을 선택하고있는 내 게임의 레벨 장면이 있습니다. 이 장면에서는 CCLabelTTF에서 선택된 레벨을 표시하고 있습니다. 이제이 라벨에 표시된 값을 내 메인 장면으로 전달하고 싶습니다. 나는 다음과 같이 이것을하고있다 :한 장면에서 다른 장면으로 변수 전달하기 - Cocos2D

HelloWorld *hello=[HelloWorld getInstance]; //HelloWorld is main scene 

hello.strLevel=[lblLevel string]; //strLevel is NSString to which I am passing the label text 

[[CCDirector sharedDirector]replaceScene:[HelloWorld node]]; 

내 HelloWorld 장면에서는 싱글 톤을 사용하여 레벨 장면에서 사용되는 레이블의 값을 공유한다. 제어()를 호출

instance=[HelloWorld new]; 

초기화를 도달

//HelloWorld.h 


@interface HelloWorld : CCColorLayer 

{ 

NSString *strLevel; 

} 

@property(nonAtomic,retain)NSString *strLevel; 

+(HelloWorld*)getInstance; 

HelloWorld.mm 

@implementation HelloWorld 

@synthesize strLevel; 

static HelloWorld *instance=nil; 

__________________________ 

//Some code 

__________________________ 


+(HelloWorld*)getInstance 

{ 

if(instance==nil) 

{ 

instance=[HelloWorld new]; 

} 

return instance; 

} 

그러나이 곧 working.As 없습니다. 그리고 왜 안돼. 그러나 컨트롤이 값을 전달하는 줄의 레벨 장면으로 돌아 오면 아무 일도 일어나지 않고 HelloWorld는 strLevel에 대해 null 값을 표시합니다.

저는 싱글 톤이 AppDelegate보다 값을 전달하는 더 좋은 방법이라는 것을 알고 있습니다. 하지만 그렇게 할 수 없습니다. 누군가 나를 교정 할 수 있습니까?

감사합니다.

답변

2

싱글 톤을 사용하십시오. What should my Objective-C singleton look like? 이것은 obj-c의 싱글 톤에 대한 좋은 토론입니다. 행운

[편집]

HelloWorld *hello=[HelloWorld getInstance]; //HelloWorld is main scene 
hello.strLevel=[lblLevel string]; //strLevel is NSString to which I am passing the label text 
[[CCDirector sharedDirector]replaceScene:[HelloWorld node]]; 

당신이 replaceScene에 전달하고있는하여 HelloWorld 인스턴스는하여 HelloWorld이 * 안녕하세요 당신이 싱글 인스턴스를 통과 으로 동일하지 않습니다. 이것이 strLevel 값이없는 이유입니다. strLevel 값은 HelloWorld 싱글 톤에 배치됩니다. 시도해보십시오

NSLog(@"%@",[[HelloWorld getInstance] strLevel]); //somewhere in the code 
+0

감사합니다. 이들은 정말 훌륭한 토론이었습니다. 하지만 내 문제는 다른 장면에서 싱글 톤을 사용하는 데있다. 싱글 톤을 사용하면 두 장면 사이에서 가치를 나눌 수 없습니다. 나는 어딘가 잘못 알고 있지만 어디 있는지 모른다. – Nitish

+0

[[MySingleton sharedInstance] myMethod]와 같이 static이기 때문에 프로그램의 어느 곳에서나 싱글 톤 객체를 호출 할 수 있습니다. sharedInstance는 클래스 함수이며 this + (MySingleton *) sharedInstance와 비슷하게 클래스 MySingleton *에 정적으로 할당 된 객체에 ptr을 반환합니다. myMethod는 인스턴스 메소드입니다. 그 트릭은 싱글 톤은 프로그램이 종료 될 때까지 살아 있다는 것입니다. 당신이 필요하다고 생각하지 않는 한 그것을 풀어주지 않았습니다. 또한 sharedInstance 호출에서 한 번만 수행되기 때문에 싱글 톤을 할당/초기화 할 필요가 없습니다. CCDirector 역시 싱글 톤입니다. –

+0

그리고 장면이 빠르게 변하기 때문에 장면을 싱글 톤으로 정의하지 않겠습니다. 당신은 기억 속의 모든 장면들에 집착하게 될 것입니다. 오히려 데이터를 저장하는 sharedData 클래스를 빌드하십시오. 그리고 이것이 여러분의 문제가 어디에 있다고 생각합니다 [[CCDirector sharedDirector] replaceScene : [HelloWorld node]]; 왜냐하면 호출 노드가 실제로 HelloWorld 장면의 새로운 자동 릴리즈 인스턴스를 반환하기 때문입니다. –

관련 문제