AFNetworking 2自定义会话管理器

时间:2014-09-11 18:05:15

标签: ios json serialization afnetworking-2

我希望会话管理器使用基本网址,而不是使用标准:

[AFHTTPSessionManager manager];

这是100%正常工作,我已经测试过了,我正在尝试使用自己的子类。

所以我已经将AFHTTPSessionManager子类化并创建了共享实例:

+ (MySessionManager *)sharedModel {
    static MySessionManager *sharedInstance = nil;
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [[self alloc] initWithBaseURL:[NSURL URLWithString:kMyBaseURL]];
        }
    }

    return sharedInstance;
}

- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (self) {
        // see description below
    }

    return self;
}

我已经检查了AFHTTPSessionManager manager的实现,它看起来像这样:

+ (instancetype)manager {
    return [[[self class] alloc] initWithBaseURL:nil];
}

所以实际上我自己的子类应该以相同的方式工作..但它没有!

我使用200获取状态代码Request failed: unacceptable content-type: text/html。但是我确定它是json,因为使用AFHTTPSessionManager manager一切正常并显示为text / json。怎么了,我做错了什么?

---编辑---

此外,我已尝试在initWithBaseURL中设置响应/请求序列化程序,但它没有帮助。

self.requestSerializer = [AFHTTPRequestSerializer serializer];
self.responseSerializer = [AFJSONResponseSerializer serializer];

---编辑---

我也尝试过使用这些配置,但一切都失败了(400,401)。

[self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[self.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", nil]];

再次:当使用manager sharedInstance时,根本没有问题 - 我成功阻止并且可以解析响应。

1 个答案:

答案 0 :(得分:0)

嗯,整个问题是kMyBaseURL是:

#define kMGBaseURL @"http://example.com/api"

而不是

#define kMGBaseURL @"http://example.com/api/"

之后我将链接用作@"/something"而不是@"something"