如何让我的应用程序记住整数?

时间:2011-05-25 00:55:54

标签: iphone xcode

在我的一个ViewControllers中,我设置了一个整数及其等于的值。我试图将这个整数放入后来的ViewController中的NSLog中,看它是否记得它,它认为它是0,它不是。我对编程很新,所以我真的很困惑。我没有释放整数,我想也许会这样做。我该怎么办?!

更新:

int位于StarsViewController.h,StarsViewController.m和StepOne.m中。

StarsViewController.h

#import <UIKit/UIKit.h>

@interface StarsViewController : UIViewController {
int typeofstar;
}

@property (nonatomic) int typeofstar;
@end

StarsViewController.m

#import "StarsViewController.h"
#import "StepOne.h"

@implementation StarsViewController
@synthesize typeofstar;


#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];
typeofstar = 1;
NSLog(@"%i", typeofstar);
}


- (IBAction)proceed {
StepOne *one = [[[StepOne alloc] initWithNibName:@"StepOne" bundle:nil] autorelease];
// you can change flip horizontal to many different other transition styles.
one.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:one animated:YES];
}

@end

StepOne.m

// I only included the important part:
- (void)viewDidLoad
{
    [super viewDidLoad];
    StarsViewController *type = [[StarsViewController alloc] autorelease];
    NSLog(@"%i", type.typeofstar);
}

3 个答案:

答案 0 :(得分:0)

StarsViewController *type = [[StarsViewController alloc] autorelease];

这一行(上图)创建了StarsViewController的一个实例。这与您刚刚来自的其他StarsViewController不是同一个实例(同一个对象)。

所以这个StarsViewController的新实例有自己的'typeofstar',最初为零。

这有意义吗?

编辑:

如何解决这个问题:

好吧,你可以直接从一个视图控制器传递到另一个视图控制器。您可以在StepOne视图控制器上创建一个属性,您可以在呈现它之前设置该属性。如果你看一下如何在StepOne视图控制器上设置modalTransitionStyle,那么你现在正在这样做。那是一个属性。您可以创建另一个名为“typeOfStar”的属性并以相同的方式设置它。

您还有许多其他共享数据的选项。当您的应用程序运行时,您必须将其视为在任何给定时间内存中的大量对象。您的应用程序委托是一个很容易从任何地方访问的对象,因此人们会使用它来存储他们想要在整个应用程序中使用的小东西。

您可以将全局变量视为另一种选择。 (明智地使用!)

随着你的需求变得越来越复杂,你可能会有其他物品作为单身人士或单身人士徘徊。

希望有所帮助。

答案 1 :(得分:0)

也许问题是你永远不会初始化StarsViewController实例。尝试以下几点:

StarsViewController *type = [[[StarsViewController alloc] initWithNibName: @"StarsView" bundle: nil] autorelease];

另外,根据Firoze的回答,每个星形视图控制器都有自己的type ivar。如果您想拥有全局类型,请查看静态变量或NSUserDefaults

答案 2 :(得分:0)

选择单身数据类,我认为这将是您的最佳解决方案。您可以在单例类中声明变量,并在应用程序的任何位置访问它。这样就保留了变量的值(在你的例子中是整数) 这就是singleton / Data类的工作原理:

// DataClass.h

@interface DataClass : NSObject {    

int i;   

}    
@property(nonatomic,assign)int i;    
+(DataClass*)getInstance;    
@end  

// DataClass.m

@implementation DataClass    
@synthesize i;    
static DataClass *instance =nil;    
+(DataClass *)getInstance    
{    
    @synchronized(self)    
    {    
        if(instance==nil)    
    {    

        instance= [DataClass new];    
    }    
}    
return instance;    
}    

现在在视图控制器中,您需要将此方法称为:

DataClass *obj=[DataClass getInstance];  
obj.i= // whatever you want;  

每个视图控制器都可以访问此变量。您只需要创建一个Data类的实例。