2011-12-14 77 views
0

我已成立了一個NSScanner到一個UIButton的水龍頭用下面的代碼工作:NSScanner工作的WiFi,但沒有3G

-(IBAction)doLoadTTData 
{ 

NSString *Period1String = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"Period1String" ofType: @"txt"] usedEncoding:nil error:nil]; 
NSString *Period2String = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"Period2String" ofType: @"txt"] usedEncoding:nil error:nil]; 
NSString *Period3String = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"Period3String" ofType: @"txt"] usedEncoding:nil error:nil]; 
NSString *Period4String = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"Period4String" ofType: @"txt"] usedEncoding:nil error:nil]; 
NSString *Period5String = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"Period5String" ofType: @"txt"] usedEncoding:nil error:nil]; 

NSURL *currentURL = [NSURL URLWithString:webView.request.URL.absoluteString]; 
NSLog(@"Loaded Timetable"); 
NSError *loaderror; 
NSString *page = [NSString stringWithContentsOfURL:currentURL 
              encoding:NSASCIIStringEncoding 
              error:&loaderror]; 

[webView loadHTMLString:page baseURL:currentURL]; 

NSString *Period1Data = nil; 

NSScanner *htmlScanner = [NSScanner scannerWithString:page]; 

[htmlScanner scanUpToString:Period1String intoString:NULL]; 
[htmlScanner scanString:Period1String intoString:NULL]; 
[htmlScanner scanUpToString:@"</FONT>" intoString:&Period1Data]; 

NSLog(@"Collected Period 1 Data: %@", Period1Data); 

if(Period1Data == NULL) 
{ 

    Period1Data = @"Not Available"; 
    [period1label setText:@"Not Available"]; 

} 

else if(Period1Data == @"(null)") 
{ 

    Period1Data = @"Not Available"; 
    [period1label setText:@"Not Available"]; 

} 

else 

{ 

    [period1label setText:Period1Data]; 

} 

NSString *Period2Data = nil; 

[htmlScanner scanUpToString:Period2String intoString:NULL]; 
[htmlScanner scanString:Period2String intoString:NULL]; 
[htmlScanner scanUpToString:@"</FONT>" intoString:&Period2Data]; 

if(Period2Data == NULL) 
{ 

    Period2Data = @"Not Available"; 
    [period2label setText:@"Not Available"]; 

} 

else if(Period2Data == @"(null)") 
{ 

    Period2Data = @"Not Available"; 
    [period2label setText:@"Not Available"]; 

} 

else 

{ 

    [period2label setText:Period2Data]; 
    [period2label setText:@"Not Available"]; 

} 

NSLog(@"Collected Period 2 Data: %@", Period2Data); 

NSString *Period3Data = nil; 

[htmlScanner scanUpToString:Period3String intoString:NULL]; 
[htmlScanner scanString:Period3String intoString:NULL]; 
[htmlScanner scanUpToString:@"</FONT>" intoString:&Period3Data]; 

if(Period3Data == NULL) 
{ 

    Period3Data = @"Not Available"; 
    [period3label setText:@"Not Available"]; 

} 

else if(Period3Data == @"(null)") 
{ 

    Period3Data = @"Not Available"; 
    [period3label setText:@"Not Available"]; 

} 

else 

{ 

    [period3label setText:Period3Data]; 

} 

NSLog(@"Collected Period 3 Data: %@", Period3Data); 

NSString *Period4Data = nil; 

[htmlScanner scanUpToString:Period4String intoString:NULL]; 
[htmlScanner scanString:Period4String intoString:NULL]; 
[htmlScanner scanUpToString:@"</FONT>" intoString:&Period4Data]; 

if(Period4Data == NULL) 
{ 

    Period4Data = @"Not Available"; 
    [period4label setText:@"Not Available"]; 

} 

else if(Period4Data == @"(null)") 
{ 

    Period4Data = @"Not Available"; 
    [period4label setText:@"Not Available"]; 

} 

else 

{ 

    [period4label setText:Period4Data]; 

} 

NSLog(@"Collected Period 4 Data: %@", Period4Data); 

NSString *Period5Data = nil; 

[htmlScanner scanUpToString:Period5String intoString:NULL]; 
[htmlScanner scanString:Period5String intoString:NULL]; 
[htmlScanner scanUpToString:@"</FONT>" intoString:&Period5Data]; 

if(Period5Data == NULL) 
{ 

    Period5Data = @"Not Available"; 
    [period5label setText:@"Not Available"]; 

} 

else if(Period5Data == @"(null)") 
{ 

    Period5Data = @"Not Available"; 
    [period5label setText:@"Not Available"]; 

} 

else 

{ 

    [period5label setText:Period5Data]; 

} 

NSLog(@"Collected Period 5 Data: %@", Period5Data); 

NSString* TimetableDate = nil; 
NSString *DateString = [NSString stringWithFormat:@"<FONT size=2>&nbsp;<STRONG><FONT size=3>"]; 

[htmlScanner scanUpToString:DateString intoString:NULL]; 
[htmlScanner scanString:DateString intoString:NULL]; 
[htmlScanner scanUpToString:@"</FONT>" intoString:&TimetableDate]; 

NSString *timetablefulldate = [NSString stringWithFormat:@"Timetable for %@", TimetableDate]; 

[timetabledate setText:timetablefulldate]; 

[TimetableLoading setHidden:YES]; 
[TimetableLoadingBG setHidden:YES]; 


if(Period1Data == NULL && Period2Data == NULL && Period3Data == NULL && Period4Data == NULL && Period5Data == NULL) 
{ 

    if(ttbacking.tag == 10) 

    { 

     NSLog(@"Already showing message"); 

    } 

    else 

    { 

     UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Timetable" 
                  message:@"Looks like you don't have any lessons today! Maybe you'd like to get some homework out of the way?" 
                 delegate:nil 
               cancelButtonTitle:@"I'll have a think" 
               otherButtonTitles:nil]; 

     [message show]; 

     [ttbacking setTag:10]; 

    } 

    [period1label setText:@"Free Time"]; 
    [period2label setText:@"Free Time"]; 
    [period3label setText:@"Free Time"]; 
    [period4label setText:@"Free Time"]; 
    [period5label setText:@"Free Time"]; 

    period1backing.image = [UIImage imageNamed:@"redperiodbacking.png"]; 
    period2backing.image = [UIImage imageNamed:@"redperiodbacking.png"]; 
    period3backing.image = [UIImage imageNamed:@"redperiodbacking.png"]; 
    period4backing.image = [UIImage imageNamed:@"redperiodbacking.png"]; 
    period5backing.image = [UIImage imageNamed:@"redperiodbacking.png"]; 

} 

if(TimetableDate == NULL) 
{ 

    [timetabledate setText:@"No timetable today"]; 

} 

[prevDay setHidden:NO]; 
[nextDay setHidden:NO]; 

NSLog(@"Student Timetable collected and published"); 

} 

不幸的是,這僅適用於WiFi和3G沒有。

如果我按下3G連接上的按鈕,則所有標籤顯示「不可用」,因爲結果爲「NULL」。這很奇怪,因爲我將UIWebView放在一切前面,以測試頁面是否實際加載並且它確實如此,就好像它在WiFi上一樣。由於某種原因,NSScanner不能使用3G。

這是爲什麼?只是告訴我,如果有任何其他代碼,你需要看到...

+0

檢查`loaderror`以查看加載內容時是否出現問題。還要檢查返回的字符串,並確保它符合您的期望。 – Joe 2011-12-14 16:55:13

+0

對不起,如果聽起來很愚蠢,但我該怎麼做? – pixelbitlabs 2011-12-14 16:57:11

回答

2

我有幾件事要說。首先,你對掃描儀和東西的處理非常不方便。如果你試圖解析HTML,你應該以正確的方式做。使用像libxml2(它內置到iPhone),實際上解析的HTML,並從它得到的東西。老實說,你的系統可能會因爲頁面的小更新或故障而中斷。

足夠的咆哮,但如果你決定離開你的當前系統,你可以嘗試從當前加載的頁面檢索實際的HTML。

例如(因爲我已經張貼在您的其他問題):

NSString *path = @"document.body.innerHTML"; 
NSString *html = [webView stringByEvaluatingJavaScriptFromString:path]; 

由於您的Web視圖可以加載,那麼你應該能夠從加載web視圖搶內容,像這樣。

如果我可以添加,這是行不通的:else if(Period1Data == @"(null)")。調試器打印(null),但是如果字符串爲空,它永遠不會顯示爲(null)。如果你比較字符串,你會做isEqualToString:,但我自己逃跑。 ;)

相關問題