-1

メソッドを呼び出して NSString 型の変数を変更しようとしています。しかし、うまくいきません。私は他のタイプでこれとまったく同じ方法を試しましたが、完全にうまくいきました。手伝ってくれませんか?

インターフェース:

- (void) changeNSString: (NSString *) stringToChange;

実装:

- (void) changeNSString: (NSString *) stringToChange{

    stringToChange = @"Test";    
}

- (IBAction)actionBla:(id)sender {

    NSString *myString = [NSString string];
    [self changeNSString:myString];
    NSLog(myString);            //Returns nothing or empty string

}

====================== 編集: CrimsonDiego の助けのおかげで、ここに実用的な解決策があります。まだ少し理解できる問題がありますが、NSMutableString を NSString var に割り当てるときに型エラーがないのはなぜですか?

インターフェース:

- (void) changeNSMutableString: (NSMutableString *) stringToChange;

実装:

- (void) changeNSMutableString: (NSMutableString *) stringToChange{

    [stringToChange setString:@"Test"]    
}

- (IBAction)actionBla:(id)sender {

    NSMutableString *myString = [NSMutableString string];
    [self changeNSMutableString:myString];
    self.myLabel.text = myString;           //Why is there no type error???

}
4

3 に答える 3

4

関数内のローカル変数に新しい変数を割り当てています。

ローカル変数は最初stringToChangeと同じ変数を参照しmyStringますが、@"Test" を stringToChange に割り当てると、元の文字列を参照しなくなります。

ここでの解決策は、を使用するNSMutableStringか、クラス変数 (またはプロパティ) を持ち、関数に渡す代わりにそれを使用することです。

于 2012-06-13T19:24:38.117 に答える
3

stringToChange関数内のローカルとしての設定。次のことを試してください。

- (NSString*) changeNSString: (NSString *) stringToChange{

    stringToChange = @"Test";
    return stringToChange;
}

- (IBAction)actionBla:(id)sender {

    NSString *myString = [NSString string];
    myString = [self changeNSString:myString];
    NSLog(myString);            //Returns nothing or empty string

}
于 2012-06-13T19:30:20.040 に答える
2

私はObjective-Cの専門家ではありませんがstringToChange、「通常の」Cのように、文字列へのポインタを含むことができるパラメータであるように思えます。パラメータは値渡しであるため、に割り当てる@"Test"stringToChange、実際にはローカル パラメータのみが変更され、 は変更さstringToChangeれませんmyString。変更したい場合myStringは、パラメーターの型を変更して、代わりにパラメーターとしてNSString **渡す必要があります。&myString

于 2012-06-13T19:28:58.783 に答える