使用prepareForSegue方法时IBOutlet属性不会更新

2023-12-19

我在将值传递给destinationViewController的IBOutlet属性时遇到问题,但它在普通属性上工作正常,请参阅下面的代码

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"NewsCellToDetail"]) {        
    testViewController *viewController = segue.destinationViewController;
    viewController.titleLabel.text = @"test"; // set the IBOutlet label text to something
    NSLog(@"%@",viewController.titleLabel.text); // this will output to nil
    viewController.textTest = @"testing2"; // set the property to something
    NSLog(@"%@", viewController.textTest) // this will output the string testing2
}

这是头文件testviewcontroller.h的代码

#import <UIKit/UIKit.h>
@interface NewsDetailViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
@property (strong, nonatomic) NSString *textTest;
@end

我已经综合了这两个属性。

谢谢您的帮助。


我回答这个问题有点晚了,但我最近遇到了这个问题,如果我们仍然手动实例化事物而不是让故事板处理它,那么原因就很明显了。这恰好和你是同样的原因never手动实例化视图控制器时操作视图:segue 的destinationViewController 尚未调用loadView:,它在故事板中通过反序列化关联笔尖中的所有视图对象来运行。

一个非常简单的方法来查看它的实际效果:

  1. 创建两个 ViewController 场景(ViewController1 和 ViewController2)
  2. 将一个按钮添加到 ViewController 1 并将一个操作从该按钮添加到 ViewController 2
  3. 将子视图添加到 ViewControler2,并将 IBOutlet 添加到该子视图
  4. 在ViewController1的prepareForSegue:中,尝试引用ViewController2的子视图出口——你会发现它是nil并且它的frame/bounds是null。

这是因为ViewController2的视图还没有被添加到视图堆栈中,但是控制器已经被初始化了。因此,你应该never尝试在prepareForSegue中操作ViewController 2的视图:否则你所做的任何事情都会丢失。请参考 Apple 的 ViewController 编程指南,了解生命周期:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html

这里接受的答案是通过访问目标的 .view 属性来强制 loadView 在prepareForSegue中运行,这就是事情显示不按顺序的原因,并且will如果您尝试在 viewDidLoad 中执行任何类型的视图操作来解释任何数据加载,则会有未知/难以重现结果,因为如果没有将视图加载到 viewStack,则对框架引用的父视图的任何引用都将为零。

TL;博士; - 如果您需要像 OP 的情况一样传递数据,请使用目标上的公共属性来设置它,然后在目标控制器的 viewDidLoad 中将该数据加载到视图的子视图中。

Edit:

类似的问题在这里 -IBOutlet 在自定义 UIView 中为零(使用 STORYBOARD) https://stackoverflow.com/questions/14089410/iboutlet-is-nil-inside-custom-uiview-using-storyboard

您可能还想利用 viewDidLayoutSubviews: 进行任何子视图操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用prepareForSegue方法时IBOutlet属性不会更新 的相关文章

  • 如何从通讯录 ios 以编程方式编辑电话号码值

    我正在尝试在 iOS 中以编程方式替换特定联系人的特定电话号码 获取联系人表单地址簿 我不知道为什么我无法保存新的电话号码并刷新地址簿以显示更改 我正在这样做 BOOL changeContactPhoneNumber NSString p
  • iOS 以编程方式将 AVI 转换为 MP4 格式

    我的应用程序中有一个查询 因为我想将 AVI 格式的视频转换为 MP4 电影格式 所以有没有什么方法可以以编程方式执行此操作 任何代码片段将不胜感激 你需要使用AVAssetExportSession将视频转换为 mp4格式 下面方法转换
  • 如何连续关闭 2 个模态视图控制器?

    我有 2 个以模态方式呈现的视图控制器 A presents B which presents C 当我解雇C时 我也想解雇B 但我不知道该怎么做 解雇C self dismissModalViewControllerAnimated YE
  • Dropbox API - 使用 Dropbox 作为服务器

    我想使用文件共享服务器来使某些文件在多台计算机上的应用程序的多个实例中保持最新和恒定 例如 例如 编写多人游戏 它将所有玩家的位置存储在文本文件中 并使用 Dropbox 之类的工具在所有应用程序中保持文本文件不变 每个应用程序实例都可以根
  • 使用 WebRTC 构建 iOS 本机应用程序

    我找了4天了 还是没找到 我构建了所有库并将其集成到我的自定义项目中 但我不知道应该采取哪些步骤才能使其正常工作 我在代码示例 解释中发现的唯一内容是 tech appear in 2015 05 25 Getting started wi
  • Objective-C - NSNotificationCenter 放在哪里?

    我有一个 NSNotificationCenter 选择器 把它放在哪里 在委托中 如果是 那么在哪里 在控制器中 方法也放在哪里 我需要解除分配 NSNotificationCenter 吗 NSNotificationCenter de
  • UITextField 的自定义字体在编辑模式下发生变化

    我有一个UITextField这是从 xib 加载的 在它的视图控制器中viewDidLoad方法中 我将字体设置为自定义值 该值在 plist file和所有 它显示良好 除非处于编辑模式 此时字体从我的自定义字体切换为默认字体 我认为这
  • didReceiveRemoteNotification 将用户带到正确的视图

    我有一个聊天应用程序 当发送新消息时 我的服务器会发送推送通知 我遇到的问题是如何将用户带到正确的视图 我正在发送一个channelID在推送通知中 但我如何检索它并将用户带入实际对话 我使用此代码来检测何时单击推送通知 void appl
  • NSView 鼠标跟踪

    我在 Mac OS X 上遇到了 Cocoa NSView 的奇怪行为 我在 NSView 容器中有一个自定义 NSView 这个自定义 NSView 跟踪鼠标移动 点击 并有一个工具提示 当我在所描述的视图上方添加 NSView 时 即使
  • iOS设备和iPhone模拟器内存​​组织的差异

    我正在尝试使用 Xcode 4 3 3 和 iPhone 5 1 模拟器开发一个应用程序 当我在模拟器上运行这个应用程序时 我没有收到任何警告 并且它运行得很好 但是 当我尝试在 iOS 设备上执行此操作时 我收到一条警告消息 收到内存警告
  • 如何为整个 iOS 应用程序设置自定义字体而不指定大小

    我正在尝试在整个我的应用程序中应用自定义字体iOS app 我发现我可以使用 UILabel appearance setFont UIFont fontWithName Proxima Nova size 17 0 设置所有的默认字体和大
  • 如何在iPhone中将字节数组转换为base64字符串?

    我有一段vb代码 我需要将字节数组转换为 Base 64 字符串 下面是vb代码 如果 arrLicence Count gt 0 那么 LicenseBytes CType Array CreateInstance GetType Byt
  • SKScene和SKView的paused属性之间的区别

    我使用以下代码暂停 SKScene self paused YES 然而 根据这个answer https stackoverflow com a 21593852 2043580 by 安德烈 戈尔杰耶夫 https stackoverf
  • UIAlertAction 处理程序在延迟后运行

    我正在尝试将 UIAlertViews 更改为 UIAlertControllers 我为此设置了这个操作 UIAlertAction undoStopAction UIAlertAction actionWithTitle Undo St
  • 使用 Facebook API 和 Objective C 来查找随机 Facebook 用户图像

    我正在构建一个返回随机 Facebook 个人资料图片的应用程序 到目前为止 我有下面的代码生成一个随机个人资料 ID 有时会返回真实的个人资料 但有时不会 只显示通用的蓝色 Facebook 面孔 当我在实际网站图形 API 上使用给定的
  • 在后台运行 URL 请求

    我想在一定的时间间隔内发出 url 请求 例如 每 10 分钟应用程序应该发出一次 url 调用并获取一些 json 数据 应用程序在后台运行时应该能够执行此操作 这可以做到吗 如果是这样 这是否违反 Apple 服务条款 有什么限制吗 i
  • Xcode 中的 NSObject 描述和自定义摘要

    我覆盖对象的 NSString description但是 Xcode 总是显示error summary string parsing error在变量视图的摘要字段中 我当前的实现如下 NSString description retu
  • 应用程序仅启用纵向,但 UIImagePickerController 在 iOS6 中旋转

    请注意 下面的答案 不适用于 iOS6 所以我仍然需要答案 我的应用程序仅启用纵向模式 但是 如果我将 UIImagePickerController 作为子视图嵌入其中 并旋转设备 则顶部和底部栏将保持在同一位置 但 UIImagePic
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji

随机推荐

  • 替换 Query 对象的 my 字段时,缓存数据可能会丢失

    这是我的代码 const NewVerificationCode gt const loading error data refetch useQuery CONFIRMATION CODE skip true onError err gt
  • ASP.NET 客户端到服务器的通信

    您能帮助我了解 ASP NET 中从浏览器到客户端进行通信的所有不同方式吗 我已将其设为社区 wiki 因此请随意编辑我的帖子以改进它 具体来说 我试图通过列出每种方法的工作原理来了解在哪种情况下使用每种方法 我对 UpdatePanel
  • 如何在java中正确格式化JSON字符串?

    我有一个球衣客户端 它从源获取 JSON 我需要将其转换为格式正确的 JSON 通过 http 请求抓取时 我的 JSON 字符串如下所示 properties someproperty aproperty set of data keyA
  • SignInManager.ExternalSignInAsync 与 Facebook 始终返回失败

    Google 可以工作 但 Facebook 总是返回失败 当我检查 loginInfo 时 它显示已验证 true 这是 Startup Auth cs 中的代码 我包含了有效的 Google 代码 public void Configu
  • 如何对岩石等复杂图像进行分割(C++)

    我正在尝试对岩石图片进行分割 我已附上示例 最终目标是找到近似的岩石区域 不确定所需的方法是否是图像分割 我尝试过几种算法 纹理分割没有帮助 因为所有的岩石都是相似的 我可以得到有很多错误的边缘 由于阴影 虽然可以使用 Here is an
  • Visual Studio UML 类图生成器

    我想知道是否有一个软件可以从 Visual Studio 2008 Professional 中的项目文件 C 生成 UML 类图 就像某种插件 我查了以前的帖子 乍一看没有看到任何有用的东西 编辑 我找到了类图项目 但愿意接受更多提示 编
  • 表的每一行的字符串偏移“Data_length”/“Index_length”非法

    学习 PHP mySQL 等 当我使用 xampp 使用 phpmyadmin 创建表时 每一行都会出现此错误 libraries classes Controllers Table TableStructureController php
  • 使用 Powershell 删除重复文件

    我有几千个重复文件 例如 jar 文件 我想使用 powershell 来 递归搜索文件系统 查找重复项 仅通过名称或校验和方法或两者兼而有之 删除除一个之外的所有重复项 我是 powershell 的新手 我将其扔给可能能够提供帮助的 P
  • JQuery 添加点击事件到单选输入文本

    我想要与单选按钮 热门 相关的标签 我开始使用 siblings 方法来实现这一点 我想一定有更好的方法 单选按钮上的单击事件如下所示 RadioButton click function event var questionId this
  • 从 C (Visual Studio) 调用 C++ 类成员函数

    我需要从 C 程序调用 C 成员函数 我在 C 代码中创建了 cpp h 包装器文件 包装了 C 成员函数 即 wrapper cpp include wrapper h extern C void wrap member1 Class m
  • 超出范围

    理想情况下 我想这样做 w 4px media max width 900px r 3px media min width 900px r 5px myclass border radius w r 这不会编译 因为 r没有在我定义的范围内
  • C#中检查线程是否正在运行

    我在 C 代码中创建了一个名为 ZipFolders 的函数 事实上 我是从 Unity 按钮调用它的 当按下它时 尝试将文件夹压缩到目录中 因为同时我想做其他事情 所以我尝试在新线程中调用该函数 我的问题是如何检查该线程是否正在运行或已停
  • 如何处理 JavaScript 中的“未定义”[重复]

    这个问题在这里已经有答案了 可能的重复 检测 JavaScript 中未定义的对象属性 https stackoverflow com questions 27509 detecting an undefined object proper
  • 为什么 Google Analytics 事件不从 onSubmit 发送?

    我想跟踪用户使用 Analytics 事件下载文件的频率 但即使事件似乎已发送 跟踪 gif 似乎并未正确到达 要下载文件 用户需要填写一份简短的表格 输入到此表单中的信息由该功能检查checkSubmit 返回false当输入的信息无效或
  • 如何在加壳器配置期间将文件复制到主机?

    我想在打包程序配置期间生成公共 私有 ssh 密钥对并将文件复制到主机 有没有办法使用打包程序将文件从虚拟机复制到主机 我想到了 文件提供程序有一个 方向 选项 允许下载而不是上传 type file source app tar gz d
  • 构建不以文件为中心的系统

    我们有一个软件基础设施 其工作方式与软件构建系统非常相似 从不同来源收集信息并用于生成一些输出 就像在传统的软件构建中一样 我们有不同类型的输出 依赖树等 主要区别在于我们的来源 中间结果和输出本质上并不是基于文件的 相反 它们是 唯一可寻
  • 不工作

    以下超链接不起作用 但当您单击 在新选项卡中打开 按钮时它会起作用 div class span12 category products style margin 0 auto div class toolbar div class row
  • 我应该使用 mysql_real_escape_string 转义预期的整数值还是可以只使用 (int)$expectedinteger

    使用cast int 代替转义是否安全 class opinion function loadbyopinionid opinionid opinionid int opinionid mysql query select from fe
  • 为什么这个数组没有索引?

    我试图将元素排序到我以这种方式构建的二维数组中 但是当代码到达二维数组时 我收到错误 数组超出索引 var categoryTempArray ProductCatalogue func sortinOut var i 0 var j 0
  • 使用prepareForSegue方法时IBOutlet属性不会更新

    我在将值传递给destinationViewController的IBOutlet属性时遇到问题 但它在普通属性上工作正常 请参阅下面的代码 void prepareForSegue UIStoryboardSegue segue send