0

下面是我的代码:

SecondViewController.h:

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

第二视图控制器.m:

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

@implementation SecondViewController
@synthesize numberOfImagesUploaded ;

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

    numberOfImagesUploaded ++ ;
}

第三视图控制器.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 访问方法体内的变量?

4

2 回答 2

0

如果您希望 numberOfImagesUploaded 访问 secondViewController 那么有几种方法:

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

    initWithnumberOfImagesUploaded:(int)num;

  2. 您可以使用 appDelegate 类。您可以在其中将其声明为属性,它将在整个应用程序中共享,但在某处我读到它不是纯粹的方式。

  3. 可能纯粹的方法是使用 Sigleton 类。然后您可以在整个应用程序中保留该变量的状态。

于 2013-07-04T08:40:53.980 回答
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 方法中分配它,要么在 a - viewDidLoador - viewDidAppearor中执行它

编辑2:

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

在你的实现中只有

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

在标题中定义一个方法

-(NSInteger)getNumberOfImagesUploaded;

然后在你的.m go

-(NSInteger)getNumberOfImagesUploaded {

     return numberOfImagesUploaded;
}

在您的 thirdViewController 中使用此方法来获取numberOfImagesUploaded

于 2013-07-04T08:44:05.633 回答