0

いくつかのWebサービスを呼び出さなければならないアプリケーションを作成しています。私はAFNetworkingを使用することを選択しました。

ライブラリで提供されているTwitterの例に従いました。通知バーに小さな「処理サークル」が恒久的にあることを除いて、すべてがうまく機能します(下の画像を参照)。

iPhoneトップバー

これが私のリクエストのために持っているコードです:

- (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];
}

これは私のリクエストが終了していないことを意味しますか?私はここで私が間違っていることを本当に理解していません...

誰かが助けてくれたら、本当にありがたいです。ありがとう。

4

1 に答える 1

5

これを呼び出さないでください [[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];。アクティビティ数を1増やしてください[operation start];。これも呼び出されます。現在、アクティビティ数は2であり、操作が完了すると減少します。しかし、あなたがそれを呼んだので、incrementActivityCountそれはそれを0ではなく1に戻します。

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];一度呼び出すだけです。たとえばapplication:applicationdidFinishLaunchingWithOptions:、アプリケーションappDeletageのメソッドに配置します。


NSOperationQueueまた、 startを呼び出すだけでなく、に操作を追加することをお勧めします。

于 2012-08-16T10:22:39.350 に答える