我正在尝试通过调用方法来更改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???
}
答案 0 :(得分:4)
您正在为函数中的局部变量分配一个新变量。
首先,局部变量stringToChange
引用与myString
相同的变量,但是当您将@“Test”分配给stringToChange时,它不再引用原始字符串。
这里的解决方案是使用NSMutableString
,或者使用类变量(或属性)并使用它而不是将其传递给函数。
答案 1 :(得分: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
}
答案 2 :(得分:2)
我不是Objective-C的专家,但在我看来stringToChange
,就像在“普通”C中一样,是一个可以包含指向字符串的指针的参数。该参数是按值传递的,因此,当您将@"Test"
分配给stringToChange
时,实际上只更改了本地参数stringToChange
而不是myString
。如果您想更改myString
,则必须将参数类型更改为NSString **
并将&myString
作为参数传递。