Почему создание экземпляра NSMutableURLRequest вызывает сбой?

Я пытаюсь создать NSMutableURLRequest, как это:

NSURL *URLWithString = [
    NSString stringWithFormat:@"%@?%@",
    urlString,
    datas
];
NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:URLWithString] autorelease];

Когда я запускаю его на своем iPhone 4S, приложение вылетает, и я получаю следующее исключение:

2012-10-30 15: 58: 53.495 [429: 907] - [__NSCFString absoluteURL]: нераспознанный селектор отправлен в экземпляр 0x1cd74a90

2012-10-30 15: 58: 53.497 [429: 907] --- Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '-[__NSCFString absoluteURL]: нераспознанный селектор, отправленный экземпляру 0x1cd74a90'

--- Первый вызов стека вызовов:

(0x361b62a3 0x344c697f 0x361b9e07 0x361b8531 0x3610ff68 0x3611363f 0x320396e7 0x32039551 0x320394ed 0x33bde661 0x33bde597 0x387e1 0x376d9f1f 0x376da9a9 0x341c535d 0x3618b173 0x3618b117 0x36189f99 0x360fcebd 0x360fcd49 0x366392eb 0x374db301 0x37cc1 0x37c58)

libC++abi.dylib: завершить вызов, выдав исключение

В чем дело?

2 ответа

Решение

Множество проблем: для начала рассмотрим, как вызывать методы NSString и NSURL. Я сделал это для кода, который вы вставили.

NSURL * myUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@?%@",urlString,datas]];

а также

NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:myUrl] autorelease];

Ваш код создания NSURL неверен.

NSURL *URLWithString = [NSString stringWithFormat: @"%@?%@", urlString, datas];

Здесь вы пытаетесь создать NSURL напрямую с помощью метода класса NSString ( stringWithFormat ) В результате ваша переменная URLWithString будет иметь неправильный тип, и когда вы отправите ему сообщение NSURL, вы получите сбой, как и вы.

Чтобы это исправить, вам нужно сначала создать NSString URL-адреса и создать NSURL, используя его, например, так:

NSString *completeURLString = [NSString stringWithFormat:@"%@?%@", urlString, datas];
NSURL *completeURL = [NSURL URLWithString: completeURLString];

(Технически, эти две строки могут быть объединены; я разделил их, чтобы прояснить, что происходит.)

Кроме того, хотя это, вероятно, не связано с вашей аварией, вы не должны вызывать переменную URL URLWithString, так как это имя метода класса NSURL. Обязательно придумайте для него уникальное имя и начните его с символа нижнего регистра (по крайней мере, это облегчит ваш код для расшифровки для других).

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