我已成立了一个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> <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。
这是为什么?只是告诉我,如果有任何其他代码,你需要看到...
检查`loaderror`以查看加载内容时是否出现问题。还要检查返回的字符串,并确保它符合您的期望。 – Joe 2011-12-14 16:55:13
对不起,如果听起来很愚蠢,但我该怎么做? – pixelbitlabs 2011-12-14 16:57:11