2014-04-16 57 views
0

我正在使用Spritekit在Xcode工作,我正在努力構建一個單獨的類來顯示高分從一個單獨的類保存和訪問變量

顧名思義,1級有一個名爲highscore@synthesize highscor = highscore;)的房產,記錄得分最高,但我無法弄清楚如何將它發送到高分類。

JKGLevel1 *class1Instance = [[JKGLevel1 alloc] init]; 
int x = class1Instance.highscor; 

這就是我試了一下,但是當我離開1級到高分類,它總是告訴我,高分是0

+0

它始終爲0的原因是因爲屏幕上的實例與使用alloc init創建的實例不同。這是我每天都在多個問題中看到的經典新手錯誤。如果你不知道如何獲得你創建的控制器的引用,那麼你將作爲一個iOS程序員絕對丟失。 – rdelmar

回答

0

所有你不需要再@sythesize什麼的第一次,但那只是題外話。你需要做的是創建一個單例類,即:一個屬性只能實例化一次的類,可以在任何地方隨時隨地訪問。

例如我使用這個用於存儲賬戶信息:在h文件

在.m文件

+ (id)sharedManager { 
static AppManager *sharedMyManager = nil; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    sharedMyManager = [[self alloc] init]; 
}); 
return sharedMyManager; 
} 

- (id)init { 
return [super init]; 
} 

#import <Foundation/Foundation.h> 
#import <Accounts/Accounts.h> 

@interface AppManager : NSObject 

@property (nonatomic, retain) ACAccount *twitterAccount; 
@property (nonatomic, retain) NSMutableArray *arrayOfAccounts; 

+ (id)sharedManager; 

@end 

**然後任何文件我想用這個:**

AppManager *sharedManager; 
sharedManager = [AppManager sharedManager]; 

NSString *usrName = sharedManager.twitterAccount.username; 

希望這實際上可以幫助你。還有其他方法可以通過創建一個可以在沒有這種單例廢話的情況下小心管理的類來實現,但這是一種更乾淨的方式。

+0

謝謝。這工作完美 – user3431312

+0

沒問題,祝你好運 – Andy

0

做這樣的事情:

  1. 在您的HighScoreClass中創建一個名爲lavel1HighScore的屬性。 (如果您不想爲每個級別創建屬性,那麼您可以通過數組來完成)。)
  2. 當您的級別1完成時,將level1的highScore傳遞給HighScoreClass的該屬性。

像:

JKGLevel1 *class1Instance = [[JKGLevel1 alloc] init]; 
HighScoreClass *highScore = [[HighScoreClass alloc] init]; 
highScore.lavel1HighScore = class1Instance.highscor; 

希望這有助於.. :)

0

你可以把分數在plist中在viewDidLoad中被讀取,或者是有原因的即時比分對象傳遞從一級水平 -

我建議你把你的分數在一個單獨的類(只是一個普通的類,帶有頭文件和方法(.h & .m),只需使該類可用於所有級別(類),這可以通過以下代碼輕鬆完成:

... levelx。 h

#import <UIKit/UIKit.h> 
    @class Class_scores; 

    @interface LevelxViewController : UIViewController <> { 
} 
    @property (nonatomic, strong) Class_scores *highscore_class; 

needless說你需要在(high_score)類中定義一個函數來返回高分並從你的關卡類中調用它。