2012-04-04 47 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的引用,当你创建你的第三个视图控制器时,给它同样的引用。

(更妙的是将有它自己的对象共享数据,并围绕票代替,但让我们对象生命周期理论下控制第一。:-))

相关问题