2010-05-02 10 views
0

원격 HTML을 표시하고 로컬 이미지를 사용하는 앱에서 작업하고 있으므로 웹 사이트의 HTML을 다운로드하여 "로컬 "페이지에서 내 번들의 이미지에 액세스 할 수 있습니다.Object-C : null을 반환하는 initWithContentsOfURL

어떤 이유로 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

, 왜 NSString *으로 선언되지 appURLnotConnectedHTML입니까? 그들은이 방법으로 다른 곳에서 선언 했습니까?

두 번째로 실제 요청 URL을 만들려면 NSURL-urlWithString:relativeToURL:을 사용하는 것이 좋습니다.

세 번째로 (그리고 이것이 내가 실제로 의심되는 실제적인 문제입니다) 두 개의 C 프리미티브를 비교하려면 ==을 사용하십시오. =은 대입 연산자입니다 (왼쪽의 것은 오른쪽의 것과 같게 만듭니다). 두 Objective-C 개체를 비교하려면 -isEqual: 또는 -isEqualToString:과 같은 비교 방법을 사용하십시오 (구체적으로는 NSStrings).

그래서 대신 :

if (seedString = @"(null)") 

NSLog 밖으로 때 뱉어 무엇 때문에

난 당신이 비교하려는 이유 "(널)"를 의심하지만
if ([seedString isEqualToString:@"(null)"]) 

이 사용해야합니다 객체는 nil과 같습니다. 객체가 nil 때 객체가 nil 있는지 확인하기 위해 이것을 사용한다, 그래서 객체 참조 자체는 nil 정수와 같은 :

if (seedString == nil) 

그냥 좋은 측정을 위해, 어떤 사람들은이 구문을 사용하고자하는 정확히 동일한 일을합니다 :

if (!seedString) 
+0

와우, 나는 100 년 동안을 보았을 수 있었고 해결책을 찾지 못했을 것입니다. 고마워, 닉! :) 그런 신참 실수 나는 그것을 hehe 믿을 수 없어 당신이'urlWithString : relativeToURL :'을 사용하여 의미하는 것이지만, 내가 사용하고있는 것과 더 나은/다른 것을 어떻게 이해할 수 있습니까? 예, 처음에는 두 개의 변수가 전역 변수입니다. – AragornSG

+0

NSString은 프리미티브로 적합하지 않습니다. 두려운 것 같습니다.하지만 두 문자열을 비교할 때 가장 좋은 방법은 아닙니다. NSString은 다음과 같은 자체 메서드를 제공합니다. if ([seedString isEqualToString : @ "(null)"]) –

+0

문제가 없습니다! 'NSURL' 대신'NSURL'으로'appURL'을 저장하면'[NSURL urlWithString : @ "/ seed.php"relativeToURL : appURL]'할 수 있습니다. 보통 Cocoa/CocoaTouch 프로그래밍에서는 URL을'NSString'보다는'NSURL' 객체로 저장합니다. 제가 작성한 방식은 더 읽기 쉽지만 이미 가지고있는 것과 정확히 똑같이 할 것입니다. –