1

重複の可能性:
NSString不変はその値を変更できますか?

1つのオブジェクトに変更を加えた場合、そのオブジェクトをポイントしたいと思います。同じ変更を他のオブジェクトに反映する必要があります。どうやってするか?

サンプルを作成しましたが、機能していません。

コードを一度確認してください。私のコードの間違いは何ですか?

-(void)viewDidLoad{ 
    str = [[NSString alloc] initWithString:@"Taruni"];   
    str2=str;  
    str2=@"Kalpana chawla";  
    [self changeStr:str];  
    NSLog(@"str = %@",str);
    [str release];  
    [str release];   
    [super viewDidLoad];    
}  
-(void)changeStr:(NSString *)x  
{   
    x=@"Chandra";  
}  

.hファイルで、私はこのように宣言しました

@property(nonatomic,assign) NSString *str;
@property(nonatomic,assign) NSString *str2; 

str2の値を変更しても、strが反映されません。

どうやってするか?

4

2 に答える 2

1

以下のコードを試してください。

-(void)viewDidLoad{
    NSString *str = [[NSString alloc] initWithString:@"Taruni"];
    NSString **str2 = &str;
    *str2=@"Kalpana chawla";
    [self changeStr:&str];
    NSLog(@"str = %@",str);
    [str release];
    [str release];
    [super viewDidLoad];
}
-(void)changeStr:(NSString **)x
{
    *x=@"Chandra";
}
于 2012-08-13T13:32:49.153 に答える
0

まず、文字列の内容を変更したい場合は、NSMutableString が必要です。第二に、あなたの changeStr: メソッドでは何もしませんでしたが、別の文字列を指すように "x" ポインターを割り当てました (x はローカルです)。メソッドでは、ポインター "x" はローカルであり、代入 (x = something) は行われません。そのメソッドの外に反映します。外部で何かを変更したい場合は、x.propertyName または [x methodName] を使用する必要があります。それが指している文字列に関して入力を変更したい場合は、:(NSString **)x、次に *x = @"Chandra" および [self changeStr:&str] として入力する必要があります。第三に、定数文字列 (@"constant string" のように定義) を変更することはできません。

于 2012-08-13T13:28:06.517 に答える