0

私はこれがめちゃくちゃ単純であることを知っていますが、私は自分自身に基本を再教育し、これを回避しようとしています:-)

MainVCと呼ばれるViewControllerが1つあり、ClassVCと呼ばれるViewControllerが1つあります。

ClassVCには、次のコードがあります。

@interface ClassVC : UIViewController
{
   NSString *mainLine;
}

@property (nonatomic, retain) NSString *mainLine;
@end

そして私はこれを実装ファイルに持っています:

@synthesize mainLine = _mainLine;

-(NSString *)_mainLine
{
    _mainLine = @"This a string from a Class";
    return _mainLine;
}

今、私はClassVCをMainVCに#importすると、その文字列を次のように転送できると考えていました。

 This code is in the viewDidLoad

    _mainLabel.text = _secondClass.mainLine;

    NSLog(@"%@", _secondClass.mainLine);

しかし、それは機能していません-したがって、この方法で文字列を渡すことはできませんか?

4

2 に答える 2

1

プロパティはmainLineであるため、オーバーライドされるゲッターは-(NSString *)_ mainLineではなく-(NSString *)mainLineである必要があります。

-(NSString *)mainLine
{
    _mainLine = @"This a string from a Class";
    return _mainLine;
}

これは私のために働いた。ClassVCの場合:

@interface ClassVC : UIViewController 

@property (nonatomic, retain) NSString *mainLine;

@end


#import "ClassVC.h"

@implementation ClassVC

-(NSString *)mainLine
{
    _mainLine = @"This a string from a Class";
    return _mainLine;
}

そしてこれはViewControllerで:

#import <UIKit/UIKit.h>
@class ClassVC;

@interface ViewController : UIViewController

@property (strong,nonatomic) ClassVC *secondClass;
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@end

#import "ViewController.h"
#import "ClassVC.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    ClassVC *secondClass = [[ClassVC alloc] init];
    self.mainLabel.text = secondClass.mainLine;
     NSLog(@"%@", secondClass.mainLine);
}
于 2012-09-06T00:47:32.667 に答える
0

この線:

@synthesize mainLine = _mainLine;

と呼ばれるgetterメソッドとsetterメソッドを作成し、mainLineそれぞれsetMainLine:、という名前のインスタンス変数をラップすることを意味します_mainLine。(インスタンス変数が作成されるため、ヘッダーで宣言したインスタンス変数mainLineは必要ありません)

(=の前の名前はプロパティ名であり、equalsの後の名前はそれがラップするivarの名前です)

ゲッターをオーバーライドしようとしましたが、インスタンス変数の名前を使用しました。ゲッターはアンダースコアで始まらないため、文字列を返すメソッドからアンダースコアを削除します。

したがって、メソッドでは、インスタンス変数を返すだけviewDidLoadのメソッドを呼び出しています。メソッドが呼び出されることはありませんmainLine_mainLine_mainLine

定数文字列を返すだけの場合は、プロパティとivarはまったく必要ありません。

(また、アンダースコアは慣例によりプライベートであり、Appleは基本的にアンダースコアで始まるすべてのメソッド名を予約しているため、メソッド名または変数をアンダースコアで開始しないでください。ただし、ivarはアンダースコアで開始するのが一般的です)

于 2012-09-06T00:52:33.860 に答える