2017.3.8

作者: AaronYin | 来源:发表于2017-03-08 10:18 被阅读16次

继昨天的坑后又出现一个小坑,封装的方法没有回调。

昨天的坑是认证后的用户再调登录接口时,token就不再返回,会返回一个objectID,用这个objectID调用删除认证的接口,先删除再登录。

但是发现删除成功后并没有回调,这就尴尬了。从官方文档上看,删除接口的接口返回值是空。

DELETE /authorizations/:id
Status: 204 No Content

所以AFNetworking调用接口后,返回的responseObject为nil。然后一级一级点开OctoKit源码看了一下,原来当responseObject为nil时,OctoKit没有做任何处理,导致没有回调。所以改了一下源码(本来我的原则是不该远吗,先看看通过扩展的方式能不能实现效果的,可是为了速度,先改源码吧)。

这回终于能够往下进行了。

- (RACSignal *)parsedResponseOfClass:(Class)resultClass fromJSON:(id)responseObject {
    NSParameterAssert(resultClass == nil || [resultClass isSubclassOfClass:MTLModel.class]);

    return [RACSignal createSignal:^ id (id<RACSubscriber> subscriber) {
        void (^parseJSONDictionary)(NSDictionary *) = ^(NSDictionary *JSONDictionary) {
            if (resultClass == nil) {
                [subscriber sendNext:JSONDictionary];
                return;
            }

            NSError *error = nil;
            OCTObject *parsedObject = [MTLJSONAdapter modelOfClass:resultClass fromJSONDictionary:JSONDictionary error:&error];
            if (parsedObject == nil) {
                // Don't treat "no class found" errors as real parsing failures.
                // In theory, this makes parsing code forward-compatible with
                // API additions.
                if (![error.domain isEqual:MTLJSONAdapterErrorDomain] || error.code != MTLJSONAdapterErrorNoClassFound) {
                    [subscriber sendError:error];
                }

                return;
            }

            NSAssert([parsedObject isKindOfClass:OCTObject.class], @"Parsed model object is not an OCTObject: %@", parsedObject);

            // Record the server that this object has come from.
            parsedObject.baseURL = self.baseURL;
            [subscriber sendNext:parsedObject];
        };

        if ([responseObject isKindOfClass:NSArray.class]) {
            for (NSDictionary *JSONDictionary in responseObject) {
                if (![JSONDictionary isKindOfClass:NSDictionary.class]) {
                    NSString *failureReason = [NSString stringWithFormat:NSLocalizedString(@"Invalid JSON array element: %@", @""), JSONDictionary];
                    [subscriber sendError:[self parsingErrorWithFailureReason:failureReason]];
                    return nil;
                }

                parseJSONDictionary(JSONDictionary);
            }

            [subscriber sendCompleted];
        } else if ([responseObject isKindOfClass:NSDictionary.class]) {
            parseJSONDictionary(responseObject);
            [subscriber sendCompleted];
        } else if (responseObject != nil) {
            NSString *failureReason = [NSString stringWithFormat:NSLocalizedString(@"Response wasn't an array or dictionary (%@): %@", @""), [responseObject class], responseObject];
            [subscriber sendError:[self parsingErrorWithFailureReason:failureReason]];
        } else {
            parseJSONDictionary(nil);
            [subscriber sendCompleted];
        }

        return nil;
    }];
}

相关文章

  • 妈妈,您是我的"女王陛下"

    2017.3.8 米粒 7周10个月

  • 2017.3.8

    2017.3.8 实证分享 实证一:6号课程中大师兄说,实证平时不干家务的会做一顿饭,平时就妈妈、我和孩子在一起...

  • 2017.3.8

    最近比较忙,好久没有写日志了。今天带潇潇到琴行去体验古筝,体验完后马上就报名了。回到家,潇潇兴奋地说:妈妈,昨天老...

  • 2017.3.8

    我也挺相信越努力越幸运这句话。之所以幸运,也是努力的结果。因为你的努力,别人会看到你的潜力,觉得你是有用之才,换来...

  • 2017.3.8

    今日事情果然还是得今日毕,拖延症只会让你陷入没有尽头的泥潭,越陷越深,窒息,然后吞没。现在只希望我在窒息之前能把自...

  • 2017.3.8

    今天过节给自己一份大礼 报名考驾照,不惧年龄,不惧压力! 呵呵……

  • 2017.3.8

    继昨天的坑后又出现一个小坑,封装的方法没有回调。 昨天的坑是认证后的用户再调登录接口时,token就不再返回,会返...

  • 2017.3.8

    女神节,群里发红包纷纷,抢的也不亦乐乎,已女神经一枚,还盼着人称女神,好吧,自娱自乐而已。

  • 2017.3.8

    为什么有人总是运气很好。 首先你没有看到过别人吃苦,俗话说得好,光看贼吃肉没看贼挨打。还有就是,如果郭静没有努力的...

  • 2017.3.8

    今年的3月8号过得非常有意义。很荣幸的遇到了学术上很有成就并且很有权威的水利专家。世间高人莫过如此啊!他的同学刘慈...

网友评论

      本文标题:2017.3.8

      本文链接:https://www.haomeiwen.com/subject/gyqbgttx.html