我想在一个block里对一个成员变量赋值,但是提示“ use of undeclared identifier self"错误,
请问这是怎么回事?
代码如下:
void (^successBlock)(id ) = ^(id responseObject){
NSLog(@"responseObject:%@",responseObject);
NSInteger result = [[responseObject objectForKey:@"result"]integerValue];
if(result == 1){
self.missionsArr= [[responseObject objectForKey:@"data"]objectForKey:@"list"];
}else if (result == 0){
NSLog(@"0");
}
};
请把这段代码写在函数体内部,不要写在函数的外面。
写在外面编译器会把它当成c语言编译,当然c语言是没有所谓的成员变量和self的,只有全局变量和局部变量。
如果你非要写在外面,你需要这么写:
YourClass* yourclass;
@implementation YourClass
void (^successBlock)(id ) = ^(id responseObject){
yourclass = nil;
};
@end
可以尝试用 weak 或者 __block 关键字对self 进行描述
在成员变量前面加上__block 就可以啦
bolck语句不允许修改成员变量,如果需要修改成员变量需要在修饰成员变量前加__block, 你这个可以在文件里加一个宏,#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
在哪里都可以用