как обрабатывать данные с сервера, не зная тип объекта (иначе, может быть словарь или массив) - PullRequest
0 голосов
/ 13 октября 2011

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

скажем, я делаю вызов API для "foo", который возвращает либо хэш-карту / nsdictionary в случае успеха, либо bool (или 0 для false, что означает, что он не выполнялся).

с моим кодом я приведу его, я полагаю, он должен предполагать, что это была успешная операция. я проверю, получу ли я что-то еще, чего я ожидал, скажем BOOL false.

NSString *mapContext = (NSString *) [call xmlrpcCall:@"load_map" withObjects:   [NSArray arrayWithObjects:dataCenter.state,nil]];   
NSLog(@"mapContext in loadStateMap: %@", mapContext);
if ([mapContext isKindOfClass:[NSDictionary class]])
{
    if ([mapContext objectForKey:@"faultCode"])
    {
        NSLog(@"mapContext: %@", mapContext);
        [self defaultAlert:mapContext titleMsg:@"load_map"];
    }
}

здесь я прошу сервер загрузить карту. в случае успеха он вернет строку. в случае сбоя он вернет словарь с кодом ошибки и сообщением об ошибке. Так как mapContext создается в виде строки, когда я проверяю, является ли это словарь, и проверяю код ошибки ключа, xcode выдает мне предупреждение, что mapContext может не отвечать на «objectForKey». Я полностью понимаю, почему я получаю предупреждение, но есть ли способ, как я могу предотвратить предупреждение? оно никогда не ломает приложение, но раздражает видеть более 30 предупреждений об этой проблеме.

1 Ответ

1 голос
/ 13 октября 2011

Используйте id, это то, для чего это нужно, и именно поэтому их используют очень многие абстрактные базовые классы (любой NSArray).

//problem solved!
id mapContext = [call xmlrpcCall:@"load_map" withObjects:   [NSArray arrayWithObjects:dataCenter.state,nil]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...