【问题标题】:recursive function get "Variable is not assignable (missing __block type specifier) error"递归函数得到“变量不可赋值(缺少__block类型说明符)错误”
【发布时间】:2016-05-19 05:46:33
【问题描述】:

我想在队列中发送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"

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

【问题讨论】:

  • 好的,让我们从manager开始。当方法结束时,它会被销毁,是吗?那么它究竟是如何做到的呢?
  • @trojanfoe 销毁管理器没有问题,我只是想再次调用这个方法,这样我就可以在上一个请求完成后开始新的请求。是的,这不是最好的解决方案,但它可以解决问题。我也尝试了其他解决方案,但它们根本不起作用:stackoverflow.com/questions/37297033/…

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


【解决方案1】:

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

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

[self sentTest:i + 1];

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

【讨论】:

  • 这是一个真实的代码,我使用你之前的评论来解决它,在块前使用__block int count = i,在块内使用[self sentTest:++count],无论如何谢谢@trojanfoe
  • @SoheilNovinfard:不。更改i 对你来说毫无意义,因为没有人可以再次阅读i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
相关资源
最近更新 更多