这有效:
NSString *myVar = @"whatever";
NSDecimalNumber *myNum = [NSDecimalNumber decimalNumberWithString:@"10"];
myVar = [myNum stringValue];
具有可变字符串的此版本会产生警告“来自不同的Objective-C类型的赋值”:
NSMutableString *myVar = [NSMutableString stringWithString:@"whatever"]; //UPDATE: CORRECTED CODE
NSDecimalNumber *myNum = [NSDecimalNumber decimalNumberWithString:@"10"];
myVar = [myNum stringValue];
在这两种情况下,stringValue返回一个NSCFString。不可变的NSString变量无关紧要,可变的NSMutableString提示。
P.S.有人请为NSMutableString和stringValue添加标签。
最佳答案
-stringValue
返回NSString自动释放的实例,它是不可变的对象。即使将其分配给可变的字符串指针,它也不会使字符串可变,并且您将无法在其上调用可变的字符串方法(顺便说一句,第一个代码也是如此):
NSMutableString* tStr = @"lala";
[tStr appendString:@"lalala"]; // CRASH! Attempting to mutate immutable object
处理它的正确方法是使用便捷方法创建可变字符串:
NSMutableString* tStr = [NSMutableString stringWithString:@"lala"];
[tStr appendString:@"lalala"]; // OK
关于objective-c - cocoa :NSMutableString使用stringValue发出警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2092126/