我正在制作一个必须调用某些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。