You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中UIAlertController标题字符串更新后不生效问题求助

解决UIAlertController标题无法随NSString更新的问题

问题本质

NSString是不可变字符串类型,你创建UIAlertController时,它会读取当时Value指向的字符串内容(也就是@"1")并独立保存起来。之后你把Value重新赋值为@"2",只是改变了这个变量的指针指向,和已经创建好的alert没有任何关联,所以弹窗标题不会跟着变。

两种解决方案

方案1:直接修改alert的title属性

既然alert已经保存了标题的副本,直接修改它的title属性就能更新弹窗显示:

NSString *Value = @"1";
NSLog(Value);
UIAlertController *alert = [UIAlertController alertControllerWithTitle:Value message:nil preferredStyle:UIAlertControllerStyleAlert];
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
[topController presentViewController:alert animated:YES completion:nil];

// 直接更新alert的标题
alert.title = @"2";
Value = @"2";
NSLog(Value);

方案2:用NSMutableString实现动态同步

如果想通过修改字符串对象本身来同步更新弹窗标题,可以用可变字符串NSMutableString。因为alert会持有这个可变对象的引用,当你修改对象内部的内容时,弹窗显示的标题会自动同步:

NSMutableString *Value = [NSMutableString stringWithString:@"1"];
NSLog(Value);
UIAlertController *alert = [UIAlertController alertControllerWithTitle:Value message:nil preferredStyle:UIAlertControllerStyleAlert];
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
[topController presentViewController:alert animated:YES completion:nil];

// 修改可变字符串的内容,弹窗标题会同步更新
[Value setString:@"2"];
NSLog(Value);

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:02:43