2013-04-04 3 views
0

Я использую этот метод ниже, чтобы получить данные из URL, но я хочу, чтобы сделать его возвращает ошибку, если statusCode не равен 200.сделать метод Objective-C вернуть ничего

+ (NSData *)getData:(NSString *) url { 
    NSURL *urlNS = [[NSURL alloc] initWithString:url]; 
    NSURLRequest * urlRequest = [NSURLRequest requestWithURL:urlNS]; 
    NSError * error = nil; 
    NSHTTPURLResponse* urlResponse = nil; 
    NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&error]; 
    int statusCode = [urlResponse statusCode]; 
    if(statusCode == 200) { 
     return data; 
    } else { 
     //return the error object which is not NSData or which is converted to NSData 
    } 
} 

Мои вопрос

могу ли я каким-то образом вернуть моя ошибка (это будет переменная ошибки определена выше) в не объект NSData или я могу возможно преобразовать свою ошибку в NSData?

+3

Не префикс метода 'get'; который зарезервирован для особого случая, что это не так. 'downloadData: error:' будет казаться более подходящим. – bbum

+0

Sharp eyes, как обычно, @bbum – matt

ответ

11

Обычное соглашение - вернуть нуль, если есть ошибка.

Если вы также хотите сообщить об ошибке, обычно необходимо предоставить дополнительный параметр по косвенности (NSError**).

Пример:

+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error 

Return Value

A string created by reading data from the file named by path using the encoding, enc. If the file can’t be opened or there is an encoding error, returns nil.

Какао использует этот шаблон очень сильно.

+0

Итак, это будет ... '+ (id) getData: (NSString *) ошибка URL: (NSError **) error'? –

+0

'- (NSData *) getData: (NSString *) url error: (NSError **) error' – matt

+0

Когда я говорю« return error », я получаю сообщение об ошибке:« Неявное преобразование косвенного указателя на «...» запрещен АРК ». Как это исправить? –