ios-ivar在块内为空,但在块执行之前设置
我有以下代码:ios-ivar在块内为空,但在块执行之前设置,ios,block,ivar,Ios,Block,Ivar,我有以下代码: [GetUserData getUserDataWithBlock:^(UserData *userData, NSError *error) { self.userData = userData; #1 self.userData.fbUser = user; // Call REST API of server 'GetAllWords'
[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中设置正确(且不为null),但当我进入#2-self.userData
时变为null。。。
点1是我唯一设置
self.userData
的地方,如果userData
属性被定义为weak
(特别是getAllWordsWithBlock
异步运行),我可以想象您描述的行为
如果不是,我建议对基础变量设置一个“监视”:
- 在代码中的点#1(可能在点#2)设置断点,并在调试器中启动应用程序
- 当调试器在第一个断点处停止时,在支持
属性的变量上添加一个监视,方法是在“Variables”视图中右键单击(或控制单击)变量并选择“watch”(显然,此屏幕快照是另一段代码,但它说明了如何在Xcode中创建“watch”):userData
- 通过单击“继续”按钮恢复执行:
- 当你点击一个观察断点时,有时你会盯着汇编程序看,但你可以点击“跳出”按钮,直到你在代码中找到一个你能识别的点
这有助于确定是什么改变了变量(如果不是一个简单的
弱属性问题)。这里是否涉及GCD?如果是,请提供代码。