1

アプリの2つのクラス(ViewControllerClass_AからViewControllerClass_Bまで)間でNSStringを渡す必要があります。StackOverflowで検索しましたが、これは私の状況の簡略化されたコードです。

Class_A.h

#import "Class_B.h"

@interface ViewController : UIViewController {
    NSString *stringToPass;
}

@property (retain, nonatomic) NSString *stringToPass;
-(NSString *)stringPassage:(id)sender;

@end

Class_A.m

- (NSString *)stringPassage:(id)sender{
    NSString *string = @"A FANTASTIC STRING!"; //here I define string INTO the - (NSString *) method
    NSLog(@"String to pass: %@",string);
    return string;
}

Class_B.h

#import "Class_A.h"

Class_B.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    Class_A *Class_A_Instance = [[Class_A alloc] init];
    NSString *importedString = [Class_A_Instance stringPassage:self];
    [Class_A_Instance release];

    NSLog(@"Received String: %@",importedString);

    // Do any additional setup after loading the view from its nib.
}

まあ、それは魅力のように機能します!Class_Bがロードされると、ログ出力で「渡す文字列:素晴らしい文字列!」を読み取ることができます。および"受信した文字列:素晴らしい文字列!"; しかし、コードのこの部分だけを変更した場合(必要です!):

Class_A.m

 - (void)viewDidLoad
{
    [super viewDidLoad];

    stringToPass = @"ANOTHER FANTASTIC STRING!";

        // Do any additional setup after loading the view, typically from a nib.
   }

- (NSString *)stringPassage:(id)sender{
    NSString *string = stringToPass; // here I must call the string FROM another method of Class_A (in this example from - (void)viewDidLoad
    NSLog(@"String to pass: %@",string);
    return string;
}

ログ出力「渡す文字列:(null)」とobv「受信した文字列:(null)」を読み取ることができます。この-(NSString *)メソッドを除いて、グローバル変数*stringToPassをClass_Aのすべてのメソッドに完全に渡すことができるので信じられないほどです。では、何が問題なのでしょうか。ありがとう!

4

3 に答える 3

1

- (void)viewDidLoadを呼び出すまで呼び出されません-(NSString *)stringPassage。の方法に移動stringToPass = @"ANOTHER FANTASTIC STRING!";してみてください-(id)initClass_A

于 2012-10-02T16:06:28.507 に答える
0

initメソッドではなく、メソッドを呼び出していviewDidLoadます。

これをClass_Aに追加すると、より近くなります。

-(id) init {
    self = [super init];
    if(self) {
        stringToPass = @"ANOTHER FANTASTIC STRING!";   
    }

    return self;
}
于 2012-10-02T16:27:46.487 に答える
0

2つのviewController、つまりFirstVCとSecondVCがあるとします。SecondVCで文字列を作成します。

@interface SecondVC : UIViewController { NSString *string2pass; }

@property (retain, nonatomic) NSString *string2pass;

FirstVCで、SecondVCを提示する場合は、文字列を次のように渡します。

- (void)presentSecondView 
  { 
    SecondVC *secondVC = [[SecondVC alloc]initWithNibName:@"SecondVC" bundle:nil]; 

    secondVC.string2pass = @"this is a passing string";

   [self presentModalViewController:resView animated:YES];

  }    
- (void)viewDidLoad 
  { 
      NSString *string4mFirstVC = string2Pass 
  }
于 2012-10-02T18:23:59.333 に答える