2012-04-04 22 views
0

我真的很苦惱,我知道它有多容易,但我只是沒有得到它的工作。Objective C如何通過多個視圖添加到整數

我很新的對象 - ...

基本上,這個程序是非常簡單的。

它堆疊在模態視圖控制器上,一個在另一個之上,直到用戶獲得結果的那一端,然後他們全部被解散,並且用戶可以重新開始。

在每個模式視圖控制器中,我想,例如,將1添加到我在第一個屏幕中聲明的int中。

這是第一個觀點或者Controller.h聲明

int total; 

這是我的第二個觀點Controller.m或者

FirstViewController *fvc = [[FirstViewController alloc] init]; 
[fvc setTotal:1]; //or the following, i can't see what the difference is 
fvc.total = 1; 

正在做,這似乎這樣的伎倆,它設置我在另一個視圖中聲明的變量。

然而,在第三視圖Controller.m或者,我這樣做:

FirstViewController *fvc = [[FirstViewController alloc] init]; 
NSLog(@"Current total: %x", fvc.total); 

這工作,在我不明白的錯誤,但整數已經重置爲0。理想的情況下,它會說'1',以顯示它保留的值...

我的問題是;我如何在整個應用程序中重複使用並添加到此整數?

也請回答與字符串有關的問題,因爲我也想這樣做。

對不起,我還在學習。

在此先感謝。

+0

[在不同的類中設置Bool]的可能的重複(http://stackoverflow.com/questions/10004502/setting-bool-in-different-classes) – Chuck 2012-04-04 22:48:37

回答

0

如果你定義一個變量靜態的,它在不同的實例中保留其價值。你可以這樣做在你的類是這樣的:

@interface FirstViewController : UIViewController 

- (NSInteger)sharedValue; 
- (void)setSharedValue:(NSInteger)value; 

@end 


@implementation FirstViewController 

static NSInteger sharedValue = 0; 

- (NSInteger)sharedValue 
{ 
    return sharedValue; 
} 

- (void)setSharedValue:(NSInteger)value 
{ 
    sharedValue = value; 
} 

@end 

現在,您創建的共享sharedValue的同一副本的任何FirstViewController的情況下,如果你將它放在一個,並從另一個得到它,它會工作你想要的方式。相同的過程適用於字符串等,但如果您不使用ARC,請小心保留並釋放sharedValue。

比在類上創建多個靜態值更好的方法是創建一個可以設置和獲取多個屬性的共享類。這些共享類有時被稱爲「單例」,因爲它們是具有單個實例的類。

你可以看到很多蘋果使用單例的地方,例如[UIApplication sharedApplication],[NSNotificationCenter defaultCenter],[NSUserDefaults standardUserDefaults] - 這些都是在整個應用程序中重複使用單個實例的所有類的示例。

要創建一個單例,請創建一個類NSObject的新類,如下所示。然後,您可以添加你想要的任何屬性,並通過sharedInstance隨時隨地訪問他們的應用程序:

@interface MyObject : NSObject 

@property (nonatomic, assign) NSInteger someInteger; 
@property (nonatomic, strong) NSString *someString; 

+ (MyObject *)sharedInstance; 

@end 


@implementation MyObject 

@synthesize someInteger, someString; 

+ (MyObject *)sharedInstance 
{ 
    static MyObject *sharedInstance = nil; 
    if (sharedInstance == nil) 
    { 
     sharedInstance = [[self alloc] init]; 
    } 
    return sharedInstance; 
} 

@end 

現在可以說

[MyObject sharedInstance].someInteger = 5; 

... 

NSInteger value = [MyObject sharedInstance].someInteger; 

訪問任何地方的共享屬性在您的應用程序這是絕對是將全局數據存儲在您的應用中的最佳方式。

+0

非常感謝,這真的爲我清理了一些東西! – 2012-04-04 23:35:45

0

每當你使用alloc時,你正在創建一個新的對象。你的新對象通常是不知道你以前對另一個對象做了什麼,因爲它是相同類型的對象。

一般策略是:當你創建你的第二個視圖控制器時,給它一個對你現有的fvc的引用,當你創建你的第三個視圖控制器時,給它同樣的引用。

(更妙的是將有它自己的對象共享數據,並圍繞票代替,但讓我們對象生命週期理論下控制第一。:-))

相關問題