以下是我的代码:
SecondViewController.h:
#import <UIKit/UIKit.h> @interface SecondViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> -(IBAction) UploadMethod:(id)sender; @property (nonatomic) NSInteger numberOfImagesUploaded ; @endSecondViewController.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访问方法体内的变量?
Below is my code:
SecondViewController.h :
#import <UIKit/UIKit.h> @interface SecondViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> -(IBAction) UploadMethod:(id)sender; @property (nonatomic) NSInteger numberOfImagesUploaded ; @endSecondViewController.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 ; }My problem is in the line
NSInteger number = useSecondView.numberOfImagesUploaded ;While the number always return 0, as I test the contents of numberOfImagesUploaded in SecondViewController, it is a integer that is not zero. So, am my method wrongly to get a variable from other viewController? Or I cant access the variable which is inside a method body from another viewController?
最满意答案
place 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去
-(NSInteger)getNumberOfImagesUploaded { return numberOfImagesUploaded; }在thirdViewController中使用此方法获取numberOfImagesUploaded的值
place numberOfImagesUploaded = 1; in your init method like so
//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; }edit: just so you know in the future, this:
@synthesize numberOfImagesUploaded ; NSInteger numberOfImagesUploaded = 1 ;is wrong, you are redefining a variable here (not even sure why this would compile, local declaration probably hides the property defined in the header), but you already defined that variable in your header. if you want to give it a default value, either assign it in your init method, or do it in a - viewDidLoad or - viewDidAppear or something
edit 2:
remove the @property in the header and the @synthesize variables
in your implementation just have
static NSInteger numberOfImagesUploaded = 1 ; //sort of like you had itdefine a method in your header
-(NSInteger)getNumberOfImagesUploaded;then in your .m go
-(NSInteger)getNumberOfImagesUploaded { return numberOfImagesUploaded; }use this method in your thirdViewController to get the value of numberOfImagesUploaded
如何从一个viewController的方法体到另一个ViewController访问变量(How to access a variable from one viewController's method body to another ViewController)以下是我的代码:
SecondViewController.h:
#import <UIKit/UIKit.h> @interface SecondViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> -(IBAction) UploadMethod:(id)sender; @property (nonatomic) NSInteger numberOfImagesUploaded ; @endSecondViewController.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访问方法体内的变量?
Below is my code:
SecondViewController.h :
#import <UIKit/UIKit.h> @interface SecondViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> -(IBAction) UploadMethod:(id)sender; @property (nonatomic) NSInteger numberOfImagesUploaded ; @endSecondViewController.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 ; }My problem is in the line
NSInteger number = useSecondView.numberOfImagesUploaded ;While the number always return 0, as I test the contents of numberOfImagesUploaded in SecondViewController, it is a integer that is not zero. So, am my method wrongly to get a variable from other viewController? Or I cant access the variable which is inside a method body from another viewController?
最满意答案
place 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去
-(NSInteger)getNumberOfImagesUploaded { return numberOfImagesUploaded; }在thirdViewController中使用此方法获取numberOfImagesUploaded的值
place numberOfImagesUploaded = 1; in your init method like so
//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; }edit: just so you know in the future, this:
@synthesize numberOfImagesUploaded ; NSInteger numberOfImagesUploaded = 1 ;is wrong, you are redefining a variable here (not even sure why this would compile, local declaration probably hides the property defined in the header), but you already defined that variable in your header. if you want to give it a default value, either assign it in your init method, or do it in a - viewDidLoad or - viewDidAppear or something
edit 2:
remove the @property in the header and the @synthesize variables
in your implementation just have
static NSInteger numberOfImagesUploaded = 1 ; //sort of like you had itdefine a method in your header
-(NSInteger)getNumberOfImagesUploaded;then in your .m go
-(NSInteger)getNumberOfImagesUploaded { return numberOfImagesUploaded; }use this method in your thirdViewController to get the value of numberOfImagesUploaded
发布评论