Objective-C: initWithContentsOfURL, возвращающий нуль - PullRequest
0 голосов
/ 02 мая 2010

Я работаю над приложением, которое будет отображать удаленный HTML и использовать локальные изображения, поэтому я пытаюсь загрузить HTML-код веб-сайта и отобразить его как «локальную» страницу, которая будет иметь доступ к изображениям в моем комплекте.

По какой-то причине я не могу заставить initWithContentsOfURL работать. Я проверил все руководства и примеры, которые смог найти, и кажется, что я делаю это правильно, но эта вещь просто не работает, все время возвращает ноль. Та же страница, загруженная NSURLRequest requestWithURL, работает нормально.

Вот код:

- (void)awakeFromNib 
{
    appURL = @"http://dragontest.fantasy-fan.org";
    notConnectedHTML = @"Could not connect.";

    NSString *seedString = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/seed.php", appURL]]];

    NSString *HTMLdata = @"";

    if (seedString = @"(null)") {
        NSLog(@"Can't connect on awakeFromNib.");
        HTMLdata = notConnectedHTML;
    }else {
        HTMLdata = [NSString stringWithFormat:@"<body style='padding:0px;margin:0px;'>%@%@</body>", seedString, @"<br><img src='images/Default.png'>"];
    }   
    [homeView loadHTMLString:HTMLdata baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];
}

1 Ответ

4 голосов
/ 02 мая 2010

Во-первых, почему appURL и notConnectedHTML не объявлены как NSString *? Они объявлены таким образом в другом месте?

Во-вторых, вам лучше использовать NSURL -urlWithString:relativeToURL: для создания фактического URL запроса.

В-третьих (и здесь я подозреваю, что это ваша настоящая проблема), чтобы сравнить два примитива C, вы используете ==. = - оператор присваивания (он делает вещь слева равной вещи справа). Чтобы сравнить два объекта Objective C, используйте метод сравнения, например -isEqual: или -isEqualToString: (который специально предназначен для NSString с).

Так что вместо:

if (seedString = @"(null)")

Вы должны использовать

if ([seedString isEqualToString:@"(null)"])

Однако я подозреваю, что причина, по которой вы пытаетесь сравнить с "(null)", заключается в том, что это то, что NSLog выплевывает, когда объект равен nil. Когда объектом является nil, ссылка на сам объект равна константе nil, поэтому вы должны использовать это, чтобы увидеть, является ли объект nil:

if (seedString == nil)

Просто для примера, некоторым людям нравится использовать этот синтаксис, который делает то же самое:

if (!seedString)
...