如何从一个viewController的方法体到另一个ViewController访问变量

时间:2013-07-04 08:24:09

标签: objective-c

以下是我的代码:

SecondViewController.h:

#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController <UIImagePickerControllerDelegate,  UINavigationControllerDelegate> 
-(IBAction) UploadMethod:(id)sender;
@property (nonatomic) NSInteger numberOfImagesUploaded ;
@end

SecondViewController.m:

#import "SecondViewController.h"
@interface SecondViewController ()
@end

@implementation SecondViewController
@synthesize numberOfImagesUploaded ;

NSInteger numberOfImagesUploaded = 1 ;
-(IBAction)UploadMethod:(id)sender {
    // Upload method (not important)

    numberOfImagesUploaded ++ ;
}

ThirdViewController.m:

#import "ThirdViewController.h"
#import "SecondViewController.h"
@interface ThirdViewController () 
@end
@implementation ThirdViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    SecondViewController *useSecondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] ;
    NSInteger number = useSecondView.numberOfImagesUploaded ;
}

我的问题在于

    NSInteger number = useSecondView.numberOfImagesUploaded ;

虽然数字总是返回0,但是当我在SecondViewController中测试numberOfImagesUploaded的内容时,它是一个非零的整数。那么,我的方法错误地从其他viewController获取变量?或者我无法从另一个viewController访问方法体内的变量?

2 个答案:

答案 0 :(得分:0)

如果你想让numberOfImagesUploaded访问secondViewController,那么有几种方法:

  1. 您可以将该变量发送到自定义init方法,如:

    initWithnumberOfImagesUploaded:(int)num;

  2. 您可以使用appDelegate类。你可以在那里声明它作为一个属性,它将在整个应用程序中共享,但我知道它不是纯粹的方式。

  3. 可能纯粹的方法是使用Sigleton类。然后你可以通过你的应用程序保留该变量的状态。

答案 1 :(得分:0)

numberOfImagesUploaded = 1;放在init方法中,如此

//SecondViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization

        numberOfImagesUploaded = 1; //make sure you are using the synthesized propert
    }
    return self;
}

编辑: 你将来知道这一点:

@synthesize numberOfImagesUploaded ;

NSInteger numberOfImagesUploaded = 1 ;

是错误的,你在这里重新定义一个变量(甚至不确定为什么会编译,本地声明可能会隐藏标题中定义的属性),但你已经在标题中定义了该变量。如果你想给它一个默认值,可以在你的init方法中分配它,或者在- viewDidLoad- viewDidAppear或其他东西

中进行分配

编辑2:

删除标题中的@property和@synthesize变量

在你的实现中只有

static NSInteger numberOfImagesUploaded = 1 ; //sort of like you had it

在标题中定义方法

-(NSInteger)getNumberOfImagesUploaded;

然后在你的.m go

-(NSInteger)getNumberOfImagesUploaded {

     return numberOfImagesUploaded;
}

在thirdViewController中使用此方法获取numberOfImagesUploaded

的值