0

以下は私のコードです:

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からメソッド本体内にある変数にアクセスできませんか?

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 メソッドで割り当てるか、- viewDidLoadまたは- viewDidAppearまたは何かで行います。

編集2:

ヘッダーの @property と @synthesize 変数を削除します

あなたの実装ではただ持っている

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

ヘッダーでメソッドを定義します

-(NSInteger)getNumberOfImagesUploaded;

次に、あなたの .m に行きます

-(NSInteger)getNumberOfImagesUploaded {

     return numberOfImagesUploaded;
}

thirdViewController でこのメソッドを使用して、の値を取得しますnumberOfImagesUploaded

于 2013-07-04T08:44:05.633 に答える