这有效:

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/

10-14 00:01