我正在制作一个必须调用某些Web服务的应用程序。我选择与AFNetworking合作。

我遵循了库中提供的Twitter示例。一切正常,除了在通知栏中永久有一个小“处理圆圈”(请参见下图)。



这是我要求的代码:

- (id)initWithAttributes:(NSDictionary *)attributes
{
    self = [super init];
    if (!self) {
        return nil;
    }

    _name = [attributes valueForKeyPath:@"name"];
    return self;
}

+ (void)itemsListWithBlock:(void (^)(NSArray *items))block
{
    NSUserDefaults *defaults        = [NSUserDefaults standardUserDefaults];
    NSDictionary *user              = [defaults objectForKey:@"user"];
    NSDictionary *company           = [defaults objectForKey:@"company"];

    NSMutableDictionary *mutableParameters = [NSMutableDictionary dictionary];

    /*
    ** [ Some stuff to set the parameters in a NSDictionnary ]
    */

    MyAPIClient *client = [MyAPIClient sharedClient];
    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
    [[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];

    NSURLRequest *request = [client requestWithMethod:@"POST" path:@"getMyList" parameters:mutableParameters];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSMutableArray *mutableItems = [NSMutableArray arrayWithCapacity:[JSON count]];
        for (NSDictionary *attributes in JSON) {
            ListItem *item = [[ListItem alloc] initWithAttributes:attributes];
            [mutableItems addObject:item];
        }
        if (block) {
            block([NSArray arrayWithArray:mutableItems]);
        }
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
        [[[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil] show];
        if (block) {
            block(nil);
        }
    }];
    [operation start];
}


这是否意味着我的请求没有完成?我在这里并没有真正弄错我在做什么...

如果有人可以提供帮助,我将非常感激。谢谢。

最佳答案

不要调用[[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];,这会将活动计数增加1,并且[operation start];也将调用它。现在活动计数为2,操作完成后将减少。但是,由于您调用了incrementActivityCount,它将把它带回到1而不是0。

只需调用一次[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];,例如将其放置在应用程序appDeletage的application:applicationdidFinishLaunchingWithOptions:方法中。



我也建议将操作添加到NSOperationQueue中,而不仅仅是调用start。

10-08 05:53