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

我想在一个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

  • (instancetype)init self = [super self]; yourclass = self; return self; }

void (^successBlock)(id ) = ^(id responseObject){
yourclass = nil;
};
@end

可以尝试用 weak 或者 __block 关键字对self 进行描述

在成员变量前面加上__block 就可以啦

bolck语句不允许修改成员变量,如果需要修改成员变量需要在修饰成员变量前加__block, 你这个可以在文件里加一个宏,#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
在哪里都可以用