- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是我的物理设备,而不是模拟器。
我正在使用 storyboard.instantiateViewController(withIdentifier:)
实例化一个 vc 并以模态方式呈现它。我使用 presentingViewController?.dismiss(animated: true, completion: nil)
关闭它。在提供的 vc 中,我在 Deinit
中有一个永远不会运行的打印方法。
我转到Instruments > Allocations > Statistics > Allocation Summary > MyApp.ThePresenedController,它显示了 2 张脸,说出了什么问题。当我单击它们时,它带我到呈现 vc 的代码,我在其中实例化要呈现的 vc 并将其突出显示为绿色。在显示的 vc 被关闭后,它不会从 Allocation Summary 列表中删除。在呈现的 vc 中没有对呈现的 vc 的引用,因此这不是 weak var
问题。
storyboard.instantiateViewController(withIdentifier:)
为什么会给我带来问题?
展示 VC:
@IBAction func forgotPasswordButtonTapped(_ sender: UIButton) {
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let forgotPasswordVC = mainStoryboard.instantiateViewController(withIdentifier: "ForgotPasswordController") as! ForgotPasswordController
let navVC = UINavigationController(rootViewController: forgotPasswordVC)
present(navVC, animated: true, completion: nil)
}
呈现的 VC:
@IBAction func cancelButtonTapped(_ sender: UIButton) {
presentingViewController?.dismiss(animated: true, completion: nil)
}
deinit{
print("I've been dismissed")
}
我还在 AppDelegate 中使用相同的 storyboard.instantiateViewController(withIdentifier:)
代码,并且出现相同的 2 个面孔和突出显示的绿色错误。
AppDelegate didFinishLaunching:
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
if userDoesThis {
// if true this first line will highlight green
let thisVC: ThisController = mainStoryboard.instantiateViewController(withIdentifier: "ThisController") as! ThisController
let nav = UINavigationController(rootViewController: thisVC)
} else {
// if false this first line will highlight green
let thatVC: ThatController = mainStoryboard.instantiateViewController(withIdentifier: "ThisController") as! ThatController
let nav = UINavigationController(rootViewController: thatVC)
}
window?.rootViewController = nav
window?.makeKeyAndVisible()
return true
最佳答案
正如@StevenFisher 在评论中所建议的那样,问题不是绿色突出显示的行本身,而是我忽略的闭包,并且没有用 [weak self]
声明。我读过一些文章说按匿名面会将你带到有问题的代码行,但史蒂夫指出这可能不是问题所在,它可以/将把你带到问题开始的地方。在我的情况下,它一实例化就让我知道我在文件某处遇到了问题,而不是行本身。
关于ios - Swift iOS -storyboard.instantiateViewController(withIdentifier :) causing retain cycle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432803/
根据官方文档,有两种方法可以从tableView的队列中获取可重用的cell。一个是 dequeueReusableCell(withIdentifier:for:),另一个是 dequeueReus
长话短说,我的 segue 无法执行到我已经创建的下一个 Controller 。很多帮助将不胜感激。 override func viewDidLoad() { super.
我正在尝试调用一种在创建事件时获取日历的方法。我确定这种方法是为了使用 calendarWithIdentifier 获取 的 ID 这是我创建事件和调用获取日历的方法的代码。我需要调用一个特定的日历
我的自定义导航栏中有一个菜单表格 View 。如果我单击一个单元格,它应该将我带到另一个 View Controller 。但是当我点击它时我的应用程序崩溃了。 func tableView(_ ta
我有一个 tableView ,其中包含使用继承的单元格。有一个共同的祖先,然后有几种具体的实现。公共(public)类不会重写 init(style:reuseIdentifier:) ,而是定义自
swift 3.0 根据我在这里的发现,UIStoryboard 总是在函数 instantiateViewController(withIdentifier:) 中返回非可选实例。 open cla
这是 Xcode 8.2 的屏幕截图: 如果该函数不存在,现在如何将标识符添加到 View Controller ? 最佳答案 改用instantiateViewController(withIden
这个问题已经有答案了: Catching NSException in Swift (6 个回答) 已关闭 3 年前。 我有如下代码: if let vc = NSStoryboard.main?.i
我必须显示几个不同的单元格。为此,我调用了 tableView(_:cellForRowAt:),并在该方法中为 UITableViceCell 的不同类使用了两个不同的 ID。 这是一个简单的代码:
我有一个 viewController 来处理对 oAuth API 的用户身份验证。如果 user.defaults 中有存储的 token ,则此 block 运行 FRDStravaClient
为什么我们需要在使用 UIStoryboard 的 instantiateViewController(withIdentifier:) 方法实例化 View Controller 之后使用关键字进行
如果我的应用程序是通过 Firebase 发送的通知打开的,我目前正在尝试立即对新的 ViewController 执行 segue。 我正在尝试使用代码 self.performSegue(with
在 dequeueReusableCell(withIdentifier: for:) 步骤中,我无法将我的表格 View 单元格转换为自定义表格 View 单元格。 我的代码: override f
Xcode 7.3 has deprecated XCPlaygroundPage.currentPage.captureValue(_:withIdentifier:)。它的前身 XCPCaptur
在 中测试我的应用程序Xcode 11(测试版)为 iOS-13(测试版)更新,当我尝试从 Storyboard实例化 viewController 时,我崩溃了。 在以前的版本中,使用以下代码可以正
到目前为止,我遇到的大多数 UIPageViewController 教程都会在滑动到所需页面时动态创建 UIViewController。 未优化的 UIPageViewController 示例
我试图理解两个 View Controller 之间的通信。 在没有 segue 的情况下传递数据时,我看到了两种创建目标 Controller 实例的方法。 第一个是storyboard?.inst
从sb.instantiateViewController(withIdentifier:)创建一个vc10,不能使用它的属性甚至将它的类型转换为ViewController10 。 下面是我的代码:
当我尝试在我的“添加”表单中打开一个表项进行更新时,我收到了这条后续消息。 Terminating app due to uncaught exception 'NSInvalidArgumentEx
我正在尝试做的事情: 检查条件,如果条件为真,则执行 segue普通的。如果条件为假,调用 shouldPerformSegue 方法并返回 false 以取消 segue。 我是如何尝试做到这一点的
我是一名优秀的程序员,十分优秀!