block里为什么不能操作成员变量?
澳门美高梅官网
澳门美高梅官网
当前位置 : 澳门美高梅官网 > 澳门美高梅官方网站

block里为什么不能操作成员变量?

我想在一个block里对一个成员变量赋值,但是提示“ use of undeclared identifier self"错误,
请问这是怎么回事?

代码如下:

void ^successBlockid  = ^id responseObject{
    NSLog@"responseObject:%@",responseObject;
    NSInteger result = [[responseObject objectForKey:@"result"]integerValue];
    ifresult == 1{
        self.missionsArr= [[responseObject objectForKey:@"data"]objectForKey:@"list"];
    }else if result == 0{
        NSLog@"0";
    }
};

等了一天没人回答...首先说一下,我不是很能解释的清楚为什么不能在block里调用self变量。但是我遇到这种情况知道怎么可以调用self的变量。

@weakifyself;

void ^successBlockid = ^id responseObject{ NSLog@"responseObject:%@",responseObject; NSInteger result = [[responseObject objectForKey:@"result"]integerValue]; ifresult == 1{ @strongifyself; self.missionsArr= [[responseObject objectForKey:@"data"]objectForKey:@"list"]; }else if result == 0{ NSLog@"0"; } }

加一个weakify和strongify这个应该就可以解决问题了,希望楼下的回答能顺便解释以下为什么block不能回调。我大概是明白但是我解释不清楚...
如果还没有解决可以给我留言说一声,因为我这样用基本上就解决了。

不是block的问题 看你的错误信息 想是在类方法中调用了这部分代码 方便的话把多贴点代码
另外关于block的知识 推荐你看下http://www.devtang.com/blog/2013/07/28/a-look-inside-blocks/

楼上的回答是为了防止retain cycle

同意楼上,block里最好不要直接用self,最好在外面__weak typeOf& *selfweakSelf = self;
之后在block里用weakSelf就行了。防止循环引用。

同意楼上,你看到的@weakify应该是__weak的宏定义,原因楼上说的很清楚

#define WSweakSelf  __weak __typeof&*selfweakSelf = self;

广告位

澳门美高梅官网