Как проверить, является ли (id) объект нулевым в ios?

Я сделал функцию для использования веб-сервисов, теперь я хочу проверить, является ли (id) объект нулевым или нет. То, что я делаю, здесь:

-(void)callService:(NSString*)request param:(NSString*) parameters completion:(void (^)(NSArray *list, NSError *error))completionHandler
{
    [self.manager POST:request parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {

        NSLog(@"Response Object: %@", responseObject);

        if (![responseObject isKindOfClass:[NSNull class]]) {

            [self methodUsingJsonFromSuccessBlock:responseObject];

            if (completionHandler) {
                //NSLog(@"%@", list);
                completionHandler(list,nil);
            }
        }
        else {
            NSLog(@"Nothing found");
        }
    }failure:^(NSURLSessionDataTask *task, NSError *error) {

        //NSLog(@"Error: %@", [error description]);
        if (completionHandler) {
            completionHandler(nil,error);
        }
    }];
}

но то, что я нашел в точках останова, это когда (id) имеет значение null, у него есть NSZeroData, но нет NSNull, поэтому он всегда проходит мое условие. я использую AFNetworking

Вот подробности объекта ответа

Заранее спасибо за помощь.

3 ответа

Решение

Ваш responseObject не является NSNull, но NSData (который _NSZeroData является подклассом).

Так что вы действительно хотите это условие:

if ([responseObject isKindOfClass:[NSData class]] && ((NSData *)responseObject).length > 0) {
    // ...
}

Это не самый быстрый ответ, но он может быть кому-то полезен.

Вот что я использовал и что вы можете сделать:

В каком-то классе, скажите "defaults.h", вы можете определить следующее:

#define Secure(x) x != (id)[NSNull null] ? x : @""
#define isSecure(x) x != (id) [NSNull null] ? YES : NO

Позже, в вашем методе вы можете использовать его так:

if(isSecure(responseObject)){
    doSuccess
}
else {
    doError
}

Первый метод может использоваться, например, для строк, в то время как другой является общим.

Попробуй это

положить это на вершине

#define isNSNull(value) [value isKindOfClass:[NSNull class]]

а потом при сравнении

if (isNSNull(object) ...

Надеюсь, поможет.

Другие вопросы по тегам