以下是我的代码:
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访问方法体内的变量?
答案 0 :(得分:0)
如果你想让numberOfImagesUploaded访问secondViewController,那么有几种方法:
您可以将该变量发送到自定义init方法,如:
initWithnumberOfImagesUploaded:(int)num;
您可以使用appDelegate类。你可以在那里声明它作为一个属性,它将在整个应用程序中共享,但我知道它不是纯粹的方式。
可能纯粹的方法是使用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