2013-07-04 21 views
0

下面是我的代碼:如何訪問一個變量從一個的viewController的方法,身體其他的ViewController

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

NSInteger的是一種原始的類型,所以你不需要'* number' – Fonix

+0

嘗試的*盈讀取來自編譯器警告,它經常幫助 –

+0

謝謝@Fonix,黃色的錯誤已經結束。但是數量的內容也是0.我在SecondViewController中測試過,它是2 ...爲什麼 –

回答

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反向

-(NSInteger)getNumberOfImagesUploaded { 

    return numberOfImagesUploaded; 
} 

使用這種方法在你的thirdViewController得到的numberOfImagesUploaded

+0

這不起作用,因爲如果你設置numberOfImagesUploaded = 1;那麼你每次都會得到1個他想要更新值的地方。 –

+0

他有一個方法' - (IBAction)UploadMethod:(id)sender'來更新它。除非他希望它在所有'SecondViewControllers'之間持續存在,那麼他可以只是使變量靜態 – Fonix

+0

我現在有另一個問題,我測試了methid - (IBAction)UploadMethod:(id)發送器中的numberOfImagesUploaded,第一個內容爲0請致電 –

0

如果你想numberOfImagesUploaded是接入到secondViewController那麼有幾種方式:

  1. 您可以在變量發送到定製init方法,如:

    initWithnumberOfImagesUploaded:(int)num;

  2. 你可以使用appDelegate類。在那裏你可以聲明這是一個屬性,它將在整個應用程序中共享,但在某處我已經讀過它並不是純粹的方式。

  3. 也許純粹的方法是使用Sigleton類。那麼你可以通過你的應用程序來保存該變量的狀態。

+0

感謝您首先回復@ V-Xtreme。如果我想使用方法1,我應該在哪裏插入initWithnumberOfImagesUploaded:(int)num;方法?第二視圖或第三視圖? –

+0

我認爲它在你的SecondViewController中,並且你想要訪問那個變量到thirdControlled中。 –

相關問題