NSMutableString初始化时候没有赋值,之后赋值,在使用在appendString就报错

NSMutableString初始化时候没有赋值,之后赋值,在使用在appendString就报错

1
2
3
4
5
6
-(void) showPositionInfo:(int)row column:(int)col{
    NSMutableString *echoStr = [[NSMutableString alloc]init];
    [echoStr appendString:@"sy"];//位置1
    echoStr = @" ";//位置2
    [echoStr appendString:@"sy"];//位置3
}

上面代码执行过程中会报错:thread 1:signal SIGSIGABRT。详细错误信息如下:

1
2
3
4
5
6
7
8
9
10
11
12

2017-07-16 14:24:31.884291+0800 xxx[99683:1772428] *** Terminating app due to uncaught exception 'NSInvalidArgumentException'

reason: 'Attempt to mutate immutable object with appendString:'

*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff89cdc2cb __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x00007fff9eae748d objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff89d5ac3d +[NSException raise:format:] + 205
    3   CoreFoundation                      0x00007fff89d0c319 mutateError + 121
    4   chooseMovie                         0x0000000100001107 -[Cinema showPositionInfo:column:] + 167
    5   chooseMovie                         0x0000000100001188 main + 104
    6   libdyld.dylib                       0x00007fff9f3cc235 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

通过调试,知道导致报错是因为位置2(代码中注释有标注)。详细错误信息中,原因倒是有说出来,但是没太理解。希望老师能解答一下。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
Tender10 2017-07-17 16:40:38

如果想在空的字符串后面追加字符串,可以通过如下方式实现:

NSMutableString *echoStr = [[NSMutableString alloc]init];
echoStr = @" ";//位置2
echoStr =[echoStr stringByAppendingString:@"sy"];//位置3
NSLog(@"%@",echoStr);


Tender10 2017-07-16 20:07:29

其实是空字符串后面无法使用appendString追加字符串。你可以将第三行注释掉,或者将第二行注释掉都是可以正确运行的。

  • 提问者 五月未央 #1
    嗯,谢谢老师的解答。另外再问下,空字符串无法使用appendString来追加字符串,这个是oc中对可变字符串的限制,还是appendString方法自身的局限性?那能否实现空字符串后面追加别的字符串呢?怎么实现?
    2017-07-16 21:49:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS入门:基础语法与常用控件
  • 参与学习       1337    人
  • 提交作业       712    份
  • 解答问题       1878    个

很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师