-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 回答