2010-05-02 4 views
0

Я работаю над приложением, которое отображает удаленный html и использует локальные изображения, поэтому я пытаюсь загрузить HTML-код веб-сайта и отобразить его как «локальный ", которая будет иметь доступ к изображениям в моем пакете.Object-C: initWithContentsOfURL return null

По какой-то причине я не могу заставить initWithContentsOfURL работать. Я проверил все руководства и примеры, которые мог найти, и кажется, что я делаю это правильно, но дело просто не будет работать, все время возвращает null. Та же самая страница, загруженная 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]]]; 
} 

ответ

4

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

Во-вторых, вам может быть полезно использовать NSURL-urlWithString:relativeToURL:, чтобы создать реальный URL-адрес запроса.

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

Таким образом, вместо:

if (seedString = @"(null)") 

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

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

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

if (seedString == nil) 

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

if (!seedString) 
+0

Вау, я мог бы искать 100 лет, и я бы не стал искать решение. Спасибо, Ник! :) такая ошибка новобранец я не могу поверить в это хе-хе Я не понимаю, что вы имеете в виду, используя 'urlWithString: relativeToURL:', как это лучше/отличается от того, что я использую? и да, эти два вара в начале являются глобальными. – AragornSG

+0

NSString не квалифицируется как примитив, я боюсь, но вы правы, что при сравнении двух строк == это не самый лучший способ. NSString предоставляет свой собственный метод для этого: if ([seedString isEqualToString: @ "(null)"]) –

+0

Нет проблем! Если вы храните 'appURL' как' NSURL' вместо 'NSString', вы можете сделать' [NSURL urlWithString: @ "/ seed.php" relativeToURL: appURL] '. Обычно в программах Cocoa/CocoaTouch вы храните URL как объекты «NSURL», а не «NSString's». То, что я только что написал, более читаемо, но будет делать то же самое, что и вы. –