gpt4 book ai didi

ios - ivar 在 block 内为 null,尽管在 block 执行之前设置

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:52 25 4
gpt4 key购买 nike

我有以下代码:

[GetUserData getUserDataWithBlock:^(UserData *userData, NSError *error)
{
self.userData = userData;
#1 self.userData.fbUser = user;
// Call REST API of server 'GetAllWords'
[GetAllWords getAllWordsWithBlock:^(NSSet *newWords, NSError *error)
{
[self saveAllWords:newWords];
#2 [self showRootView];
}];
}];

问题是,self.userData 在 #1 中正确设置(并且不为空),但是当我到达 #2 - self.userData 变为空...第 1 点是我唯一设置 self.userData 的地方。

最佳答案

如果 userData 属性被定义为 weak(特别是,如果 getAllWordsWithBlock 异步运行),我可以想象您描述的行为。

如果没有,我建议在基础变量上设置一个“监视”:

  • 在您的代码中的第 1 点(大概是第 2 点)设置断点,并在调试器中启动应用;

  • 当调试器在您的第一个断点处停止时,通过右键单击(或 control-单击)在支持您的 userData 属性的变量上添加一个监视在“Variables” View 中的变量上并选择“Watch”(显然,这个屏幕快照是一段不同的代码,但它说明了如何在 Xcode 中创建一个“watch”):

    add watch

  • 通过点击继续按钮恢复执行:enter image description here

  • 当您遇到观察断点时,有时您会盯着汇编器看,但您可以点击“跳出”按钮 enter image description here直到您在代码中找到您认识的点。

这有助于确定是什么在改变您的变量(如果不是简单的 weak 属性问题)。

关于ios - ivar 在 block 内为 null,尽管在 block 执行之前设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18948523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com