2

我有以下代码:

[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变为空...... Point #1 是我设置的唯一位置self.userData

4

1 回答 1

2

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

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

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

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

    添加手表

  • 通过点击继续按钮恢复执行:在此处输入图像描述

  • 当您遇到监视断点时,有时您会盯着汇编程序,但您可以点击“退出”按钮在此处输入图像描述,直到您到达您识别的代码点。

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

于 2013-09-22T20:58:43.223 回答