NSString(带方法调用:stringWithContentsOfFile)

时间:2012-08-18 16:10:15

标签: iphone cocoa

NSBundle *bundle = [NSBundle bundleForClass : [self class]];
NSString *f_path = nil;

if ((f_path = [bundle pathForResource : @"about_screen" ofType:@"html" inDirectory:@"html"]) != nil)
{                      
    NSLog(@" f_path found" );  
    NSString *ns_string = [NSString stringWithContentsOfFile : f_path
                                    encoding                 : NSUTF8StringEncoding
                                    error                    : NULL
                           ];
    NSLog(@" string = %@", ns_string);  
}
else
{
    NSLog(@" f_path not found" );

}

// *** if the following assignment is commented off, there will be an error. ***
ns_string =
@"<!DOCTYPE html PUBLIC \"-//IETF//DTD HTML 2.0//EN\"><HTML><HEAD><TITLE>minimal test </TITLE></HEAD><BODY bgcolor = \"silver\"><H1>Hi</H1><P>This is very minimal \"hello world\" test document.</P> </BODY></HTML>"; 


[web_view loadHTMLString : ns_string  baseURL : nil];

考虑上面的代码段。

出于测试目的,我已将文件“about_screen.html”的内容设置为与上面代码中分配给ns_string的字符串相同。因此,如果“NSString stringWithContentsOfFile”按预期工作,则ns_string“in-line”赋值可以被注释掉而不会产生任何差别。

我的问题是:内联分配按预期工作,但没有它,就会出现运行时错误。

错误是:

  

- [About_Screen dataUsingEncoding:]:无法识别的选择器发送到实例0x6eddf70'

另请注意声明:

  

NSLog(@“string =%@”,ns_string);

始终输出正确的字符串,因此找到嵌入的html文件并正确读取。

希望熟悉这一点的人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

这个答案实际上来自@ bbamhart的评论。我认为问题是由NSUTF8StringEncoding参数引起的,因为它经常通过谷歌搜索相关主题。

问题的真正原因在于可变范围。 ns_string不应在任何条件块中声明。 (因为该变量通常不会在块外部访问。)

底线解决方案只是将声明移出块。