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
相关产品推荐
相关产品推荐

