在我的一个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);
}
答案 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类的实例。