2017.3.8

3291 ワード

昨日のピットに続いて小さなピットが現れ、パッケージの方法は回復しなかった.
昨日のピットが認証後のユーザがログインインタフェースを呼び出すとtokenは戻らず、objectIDが返され、このobjectIDで削除認証のインタフェースを呼び出し、先に削除してからログインします.
しかし、削除に成功した後、コールバックがなかったことに気づき、気まずい思いをしました.公式ドキュメントから見ると、インタフェースを削除するインタフェースの戻り値は空です.
DELETE /authorizations/:id
Status: 204 No Content

したがって、AFNetworkingがインタフェースを呼び出すと、返されるresponseObjectはnilになります.それから1級1級はOctoKitソースコードを開けて見て、もとはresponseObjectがnilの時、OctoKitはいかなる処理をしていないで、コールバックがありません.だからソースコードを変更しました(もともと私の原則は遠くないべきで、先に拡張の方式を通じて効果を実現することができることを見て、しかし速度のために、先にソースコードを変更しましょう).
これでやっと下に進むことができた.
- (RACSignal *)parsedResponseOfClass:(Class)resultClass fromJSON:(id)responseObject {
    NSParameterAssert(resultClass == nil || [resultClass isSubclassOfClass:MTLModel.class]);

    return [RACSignal createSignal:^ id (id 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;
    }];
}