Objective-C:initWithContentsOfURL返回null

时间:2010-05-02 13:12:28

标签: objective-c iphone initwithcontentsofurl

我正在开发一个可以显示远程html并使用本地图像的应用程序,所以我要做的是下载网站的HTML并将其显示为“本地”页面,可以访问我的包中的图像。

出于某种原因,我无法使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]]];
}

1 个答案:

答案 0 :(得分:4)

首先,为什么appURLnotConnectedHTML没有声明为NSString *?他们是否在其他地方宣布过这种方式?

其次,您最好使用NSURL的{​​{1}}来创建实际的请求网址。

第三(我怀疑这是你的实际问题),为了比较两个C原语,你使用-urlWithString:relativeToURL:==是赋值运算符(它使左边的东西等于右边的东西)。要比较两个Objective-C对象,请使用比较方法,例如=-isEqual:(专门用于-isEqualToString: s)。

所以而不是:

NSString

你应该使用

if (seedString = @"(null)")

但是我怀疑你试图与“(null)”进行比较的原因是因为当对象等于if ([seedString isEqualToString:@"(null)"]) 时,NSLog吐出的是nil。当对象为nil时,对象引用本身等于nil常量,因此您应该使用它来查看对象是否为nil

if (seedString == nil)

只是为了衡量,有些人喜欢使用这种语法完全相同:

if (!seedString)