递归函数get“变量不可赋值(缺少__block类型说明符)错误”

时间:2016-05-19 05:46:33

标签: objective-c recursion afnetworking objective-c-blocks

我想在队列中发送AFNetworking个请求。我为此目的创建了一个递归函数:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

     NSLog(@"Start ...");

    [self sentTest:0];
}

- (void) sentTest:(int)i{

    if(i >= 10)
    {
        NSLog(@"Finished");
        return;
    }

    NSLog(@"sending message %d ...", i);

    NSMutableDictionary *params = [@{@"param1":     @"value1",
                                     @"param2":     @"value2",
                                     } mutableCopy];
    NSString *webServiceUrl = @"MY_REST_SERVICE_URL";

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];


    [manager POST:webServiceUrl parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"message sent successful %d", i);

        // Now call the method again
        [self sentTest:i++];

         return;
         } failure:^(NSURLSessionDataTask *task, NSError *error) {
             NSLog(@"message sent failure %d", i);
             return;
    }];

}

我收到此错误:

Variable is not assignable (missing __block type specifier)  error"

我知道我需要定义块类型,但我不知道如何在这个递归函数中使用它。

1 个答案:

答案 0 :(得分:1)

我有一些担心,manager在方法结束时被销毁,但是它被块保留。

我不确定您的代码是否有效,但实际的错误消息与更新块中的i有关(并且需要应用__block属性),但是没有理由要完全增加i,只需将i + 1传递给递归方法:

[self sentTest:i + 1];

(你的代码中缺少分号,所以我不相信这是真正的代码)。