首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么如果在添加barBarttonItem的范围之外创建它,那么添加它将不起作用?

如果在添加barButtonItem的范围之外创建它,那么添加它将不起作用的原因是因为在iOS开发中,UI控件的创建和添加必须在主线程中进行。主线程是iOS应用程序的主要执行线程,负责处理用户界面的更新和事件响应。

当我们在添加barButtonItem的范围之外创建它时,可能是在一个子线程或者其他非主线程中进行的操作。在这种情况下,由于UI控件的创建和添加不是在主线程中进行,所以添加操作将不会生效。

为了解决这个问题,我们需要确保在主线程中创建和添加UI控件。可以使用GCD(Grand Central Dispatch)或者performSelectorOnMainThread等方法来将创建和添加操作放在主线程中执行。

以下是一个示例代码,展示了如何在主线程中创建和添加barButtonItem:

代码语言:txt
复制
dispatch_async(dispatch_get_main_queue(), ^{
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Button" style:UIBarButtonItemStylePlain target:self action:@selector(buttonTapped:)];
    self.navigationItem.rightBarButtonItem = barButtonItem;
});

在上述代码中,我们使用dispatch_async函数将创建和添加操作放在主线程的队列中执行。这样就确保了barButtonItem的添加操作在主线程中进行,从而能够生效。

推荐的腾讯云相关产品:腾讯云服务器(CVM) 腾讯云产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

译文:开发人员面临 10个最常见JavaScript 问题

为什么? 在大多数其他语言中,上面的代码会导致错误,因为变量i“生命”(即范围)将被限制在for块中。...例如: 除了此方法固有的改进效率之外创建附加DOM 元素成本高昂,而在分离时创建和修改它们,然后附加它们会产生更好性能。...因此,如果在没有名称情况下调用构造函数,则名称将默认为default。...所以现在我们得到了: JavaScript 问题#8:创建对实例方法错误引用 让我们定义一个简单对象,并创建一个实例,如下所示: 现在,为了方便起见,让我们创建一个对whoAmI方法引用,...写在最后 与任何技术一样,你越了解JavaScript为什么以及如何工作和不起作用,你代码就越可靠,你就越能有效地利用语言真正力量。

1.2K20

Angular Provider 作用域

root 表示服务作用域范围是根级作用域(AppModule)。...当你注册根级别的服务时,Angular 会创建一个单独共享服务实例。如果在 @Injectable 元数据中注册服务,Angular 会在构建阶段自动剔除无用服务,进而优化我们应用程序。...为什么懒加载模块与非懒加载模块会产生不一样结果呢?...如果在多个特性模块中,使用同一个 token 注册 provider,此外在根模块中同样也注册了相同 provider,只有根模块中注册 provider 会被添加到根注入器中,此后所有的特性模块将会共享同一个实例...当在懒加载模块中使用模块外服务时,它将使用根注入器创建服务实例。但如果已经在懒加载模块中注册了 provider,在模块内获取对应服务时,它将从模块子注入器中获取对应服务实例。

1.8K20
  • List.append() 在 Python 中不起作用,该怎么解决?

    Python 是一种强大而灵活编程语言,提供了许多方便数据结构和操作方法,其中之一就是列表(List)。列表是一个有序集合,可以包含不同类型元素,并且可以进行添加、删除和修改等操作。...在 Python 中,我们通常使用 List.append() 方法向列表末尾添加元素。然而,在某些情况下,你可能会遇到 List.append() 方法不起作用问题。...然而,如果在调用 List.append() 方法之前将列表变量重新赋值,那么方法将作用于新赋值列表,而不是原始列表。...避免重新赋值或引用错误列表对象。2. 检查列表是否作为参数传递如果你将列表作为函数参数传递,并且在函数内部对列表进行修改,请确保你想要修改是原始列表,而不是创建一个新列表对象。3....结论List.append() 方法在 Python 中通常是一个方便且常用方法,用于向列表末尾添加元素。然而,当遇到某些情况时,它可能不起作用

    2.5K20

    Unity基础教程系列(七)——可配置形状(Variety of Randomness)

    (速度范围) 3.5 隔离配置 我们还可以创建一个类型,以包含所有用于生成配置选项。这样可以将它们整齐地分组在一起,从而使我们不必在所有字段前都添加spawn。...然后它将使用自己配置,同时仍从子区域中选择一个生成点。 ? ? ? (一次性给所有区域配置) 4 高级配置 现在,我们已经创建了一种配置每个区域生成运动方法,我们可以扩展这种方法。...除此之外,我们必须告诉Unity我们想为什么类型创建一个Custom Property Drawer。这是通过向我们添加CustomPropertyDrawer属性完成。...我们需要重写该方法才能创建自己UI。具有三个参数:一个Rect定义要插入区域,一个SerializedProperty表示浮动范围值,以及一个GUIContent,其中包含要使用默认标签。...(滑动块 带有值域) 我们可以通过将滑块一半宽度专用于滑动块,使滑动字段各占四分之一来改善布局。另外,如果在滑块和浮点之间添加一些填充,则效果会更好。

    2.7K30

    Python中命名空间和作用域(2)

    注意,除了本地定义变量s之外,本地命名空间还包括函数参数x和y,因为它们也是f()本地参数。 如果在函数外部调用locals() ,那么它与globals()用法相同。...但是,如果f()试图重新对my_list赋值,那么它将创建一个新本地对象,并且不会修改全局my_list: >>> my_list = ['foo', 'bar', 'baz'] >>> def f...事实上,在本例中,global x语句不仅不能提供对闭包作用域内x访问,而且还在全局范围创建了一个名为x对象,其值为40: >>> def f(): ......当函数在本地作用域之外修改数据时,无论是使用关键字global或nonlocal,还是直接就地修改可变类型,都会产生副作用。这种副作用类似于在函数中修改一个参数。...在许多语言中,函数只需赋值就可以修改全局变量,而不必以任何方式声明。这使我们非常难以追踪全局数据修改位置。 总之,在本地作用域之外修改变量通常是不必要

    1K20

    在stable diffussion中完美修复AI图片

    那么接下来我们怎么修复呢? 选择对应模型 如果你经常浏览C站的话,你可以看到对于有些模型会有一种专门给重绘使用模型,这种模型是专门为图像修复而训练Stable Diffusion模型。...选择对应face restoration model:CodeFormer。 有朋友会问了,为什么页面上面没有restore faces选项呢?...这些选项使用与原始图像不同内容初始化遮罩区域。它将产生完全不同东西。 去噪强度 去噪强度控制与原始图像相比将进行多少变化。当您将其设置为0时,什么都不会改变。...当您将其设置为1时,您将获得一个不相关图像。0.75通常是一个很好起点。如果您想要更少变化,请降低。 批量大小 确保一次生成一些图像,以便您可以选择最好。...如果在AUTOMATIC1111设置中什么都不起作用,请使用像Photoshop或GIMP这样图像编辑软件,用您想要大致形状和颜色绘制感兴趣区域。上传那张图像并用原始内容进行图像修复。

    7810

    写给 vue2.0 开发者 vue3.0 教程

    它将为我们提供包括Vue 3在内最小Webpack设置。...我们将创建一个按钮来打开模态,它将触发toggleModalState方法 我们还将使用刚刚创建模态组件,它将根据modalState值呈现。我们还可以在内容槽中插入一段文本。...但是,如果这是一个更大组件,或者我们需要与其他组件共享特性,那么您就会看到有用性。...传送内容 如果您以前创建过模态特性,您就会知道通常被放置在关闭标记之前。 <!...在我们组件中使用限定范围CSS是一个很好实践,以确保我们提供规则不会对页面中其他内容产生意外影响 让我们把任何段落文本放到槽里都改成斜体。为此,我们将使用p选择器创建一个新CSS规则。

    2.8K40

    Spring事物(@transactional注解)在什么情况下会失效,为什么

    一、@transactional 使用 1、一般在service里加@Transactional注解,不建议在接口上添加 2、加了此注解后每个业务方法执行时,都会开启一个事务,不过都是按照相同管理机制...如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新事务。 2、NOT_SUPPORTED:声明方法不需要事务。...使用了一个单独事务,这个事务拥有多个可以回滚保存点。内部事务回滚不会对外部事务造成影响。只对DataSourceTransactionManager事务管理器起效。...5和4区别: 4是必须有事务环境; 5是即可以有事务也可以没有事务。如果在事务范围内,则该方法就是事务一部分。否则就以非事务方式运行。 6:never(从不): 该方法绝对不能在事务范围内执行。...使用了一个单独事务,这个事务拥有多个可以回滚保存点。 内部事务回滚不会对外部事务照成影响 只对DataSourceTransactionManager事务管理器起作用。

    54510

    Python类中属性

    ,我们有一个叫做 Me 类,代表了你——至少在你创建时如此。具有以下属性: .name,一个公共属性 → 你名字肯定是公开。...指示方法基于信任:我们相信类用户不会使用其私有属性。该方法除此之外没有其他保护措施。 指示方法基于信任:我们相信类用户不会使用其私有属性。该方法除此之外没有其他保护措施。 捉迷藏隐私。...确保继承自父类私有属性不会被继承类覆盖。因此,当你使用两个前导下划线时,你不必担心该属性在类中被继承类覆盖。 本文讨论是第一点。第二点超出了本文范围,我们将在其他时间讨论。...TypeError: 'int' object is not iterable 因此,你可以使用就地连接运算符将另一个可迭代对象(如列表、元组、范围对象和生成器)添加到列表中: >>> x += (10...这就是为什么self._thoughts += what不起作用原因。如果我们使用它,将会产生以下不希望效果: >>> marcin.

    17330

    21个Java Collections面试问答

    但是从较高范围和用法来看,Java 1.2提出了Collections Framework,该框架将所有collections接口,实现和算法分组。...因此,Map扩展Collection是没有意义,反之亦然。 如果Map扩展了Collection接口,那么元素在哪里?...迭代器允许调用者从基础集合中删除Enumeration无法实现元素。迭代器方法名称已得到改进,以使其功能更清晰。 9、为什么没有像Iterator.add()这样方法将元素添加到集合中?...10、为什么Iterator没有不移动光标就直接获取下一个元素方法? 可以在当前Iterator接口顶部实现,但是由于很少使用它,因此将它包含在每个人都必须实现接口中没有意义。...该条目存储在LinkedList中,因此,如果已经存在一个条目,则使用equals()方法检查传递键是否已存在,如果是,它将覆盖该值,否则它将创建一个新条目并存储此键值条目。

    2K40

    DockerFile就这么简单

    ""] --chown选项可以在添加文件时改变文件属主和属组,但是需要注意,这个特性只支持Linux类型容器,在windows容器上不起作用。...,并且内容将写入; 如果不存在,它将与路径中所有缺少目录一起创建。...,并且内容将写入; 如果不存在,它将与路径中所有缺少目录一起创建; 10....❞ 在定义ARG变量时,可以给变量赋初值,如果在创建镜像时没有传入变量值,那么就会使用这个初始值: FROM busybox ARG user1=someuser ARG buildno=1 ......其格式如下: ONBUILD [INSTRUCTION] 运作方式如下:当遇到ONBUILD指令时,构建器将触发器添加到正在构建镜像元数据中,该指令不会影响当前版本。

    1.6K20

    【前端技能树-需要避免坑】Javascript 开发者容易在花田里犯

    . */ } console.log(i); 如果你猜测 console.log() 是输出 undefined,或者是抛出错误,那么你猜错了。因为,它将输出 10。为什么?...所以再次疑惑为什么这里会有内存泄漏。 为了理解发生了什么,我们需要更好地理解 JavaScript 内部工作原理。闭包通常由链接到表示其词法范围字典对象每个函数对象实现。...如果在 replaceThing 内部定义两个函数,实际上都使用了 priorThing,那么它们都获得相同对象,即使priorThing 被反复赋值,以便两个函数共享相同词法环境。...eval()在严格模式和非严格模式下行为方式有所不同。最重要是,在严格模式下,在eval()语句中声明变量和函数不会在包含范围创建。...它们是以非严格模式在包含范围创建,这也可能是 JavaScript 常见问题。 无效使用 delete 时抛出错误。删除操作符(用于从对象中删除属性)不能用于对象不可配置属性。

    18211

    初学html常见问题总结

    ,所以相临两个单元格边框挨在一起变成了2px 添加这样属性:style=”border-collapse:collapse” 7、所设属性值不起作用 这个问题很另类,当代码书写成这样时:width...如果在学习过程中遇到其他问题,我们再具体问题具体分析。...,所以相临两个单元格边框挨在一起变成了2px 添加这样属性:style=”border-collapse:collapse” 7、所设属性值不起作用 这个问题很另类,当代码书写成这样时:width...,所以相临两个单元格边框挨在一起变成了2px 添加这样属性:style=”border-collapse:collapse” 7、所设属性值不起作用 这个问题很另类,当代码书写成这样时:width...如果在学习过程中遇到其他问题,我们再具体问题具体分析。

    3.6K41

    gitignore不忽略指定文件

    比如[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围都可以匹配。...需要特别注意是:如果文件父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起作用。也就是说"!"开头模式表示否定,该文件将会再次被包含,如果排除了该文件父级目录,则使用"!"...需要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配,意味着如果前面的规则匹配范围更大,则后面的规则将不会生效; 十分重要:如果你不慎在创建.gitignore文件之前就push了项目.../mtk/one.txt 唯一区别就是规则开头多了一个感叹号,Git会将满足这类规则文件添加到版本管理中。为什么要有两种规则呢?.../mtk/one.txt 假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外所有文件都写出来!

    3K40

    Android 性能优化:多线程

    如果在某次绘制过程中,我们操作不能在 16 ms 内完成,那它则不能赶上这次绘制公交车,只能等下一轮,这种现象叫做 “掉帧”,用户看到就是界面绘制不连续、卡顿。 ?...当线程存活期间,我们会让执行大量任务,当任务完成或者主动取消时,线程功成身退。...很多情况下,我们会有很多线程同时存活、执行任务,这时需要添加一个 任务队列,让线程不停地从队列中获取任务,同时有其他线程向其中添加任务,典型 生产者-消费者 模型: ?...Android 中为什么只允许在主线程更新 UI Android 系统中,默认只能在 主线程(UI 线程)更新 UI,当你在 子线程进行 UI 修改时,可能不起作用甚至是奔溃: ?...为什么要这样设计呢? 我们知道,多线程并发访问资源要遵循重要原则就是 原子性、可见性、有序性。没有同步机制情况下,多个线程同时读写内存可能会导致意料之外问题: ?

    1.1K90

    数据结构思维 第十章 哈希

    我们使用chooseMapput和get,所以当我们查询键时候,我们得到添加时所选相同映射,我们选择了相同映射。至少应该是 - 稍后我会解释为什么这可能不起作用。...如果在k个子映射中分配了n个条目,则平均每个映射将有n/k个条目。当我们查找一个键时,我们必须计算其哈希码,这需要一些时间,然后我们搜索相应子映射。...如果一些子映射比其他映射有更多条目,那么当我们有k个映射时,加速比可能远远小于k。所以哈希函数目的之一是统一;也就是说,以相等可能性,在这个范围内产生任何值。...一旦你创建了一个SillyString,你不能使innerString引用不同String,你不能修改所指向String。因此,它将始终具有相同哈希码。 但是让我们看看一个可变对象会发生什么。...public void setChar(int i, char c) { this.array[i] = c; } 现在假设我们创建了一个SillyArray,并将其添加到map。

    69520

    Unity基础系列(四)——构造分形(递归实现细节)

    创建一个新空游戏对象并将其放置在原点。这将是分形母体。然后创建一个名为Fractal新C#脚本,并将其添加到对象上。 ? ? (工程创建) 2 展示内容 脚本有了,那么分形是什么样子呢?...除此之外,子节点也没有分配材质和Mesh。这些引用可以直接从父级复制。现在添加一个处理所有必要初始化新方法。 ? this是什么意思? this此关键字引用正在调用其方法的当前对象或结构。...这就是为什么Unity在他们默认脚本模板中包含,以及为什么本示例在一开始也包括原因。...Random是一个实用工具类,包含一些接口来创建随机值。 Range 方法可用于在一定范围内生成随机值。Range方法有两个版本。...Lerp是干什么? LERP是线性插值简称。典型特征是Lerp(a,b,t),计算a+(b-a)*t,t在0-1范围内。有不同类型存在多个版本,包括浮点数、向量和颜色。 ?

    1.9K10

    你应该避免5个常见 Python 错误

    重磅干货,第一时间送达 引言 Python 是一种非常强大编程语言,语法很容易理解,即使你没有编程基础,也可以自学。在整个学习过程中,由于缺乏对某些概念理解,你可能会犯很多错误。...如果注释掉赋值语句并仅打印出变量,将看到正确打印出值。那么这是怎么回事?...log_event_time 函数调用期间没有提供 event_time,那么在调用该函数时,它将用时间戳记记录事件。...那么为什么 event_time 默认值不起作用呢? 要回答这个问题,你应该知道变量绑定发生在函数定义期间。对于上面的示例,在最初定义函数时分配了 event_time 默认值。...return user_list 你可能希望在未提供 user_list 情况下创建一个空列表,然后将新用户添加到该列表中并返回。

    86410

    Spread for Windows Forms高级主题(1)---底层模型

    如果在Spread控件中有多个表单,那么每一个表单都有一个它自己模型集合。 控件中表单某些部分是由底层模型管理,下图对模型做了概念性描述。 ?...属性将不起作用)。...默认模型是你在开发时最可能用到模型;提供了控件默认特性,并且可以用来对模型进行小范围自定义设置。基础模型是创建默认模型基础,也可以通过创建自定义模型。...如果你在模型中添加了一些列,那么这些列也会被添加到表单中。只要表单未经过排序,数据模型GetValue和SetValue方法中行和列参数,与表单中行和列参数索引就是相同。...速度和性能平衡 如果你从DefaultSheetDataModel 上派生,并使用GetValue和SetValue实现来存储数据,那么它将通过我们对稀疏数组和矩阵实现在内存使用和访问速度之间进行平衡

    1.8K60
    领券