NSScanner working on WiFi but not 3G
我已经设置了NSScanner来使用以下代码在UIButton的轻敲上工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | -(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><strong1><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连接上的按钮,则所有标签都显示" Not Available ",因为结果为" NULL "。这很奇怪,因为我一次将UIWebView放在所有内容的最前面,以测试该页面是否实际加载和加载,就像它在WiFi上一样。由于某些原因,NSScanner无法在3G上运行。
为什么会这样?只要告诉我是否还有其他代码需要查看...
我有两件事要说。首先,您使用扫描仪之类的东西确实很棘手。如果您要解析HTML,则应该以正确的方式进行。使用
已经足够了,但是如果您决定保留当前系统,则可以尝试从当前加载的页面中检索实际的html。
例如(正如我已经在您的其他问题中所述的那样):
1 2 | NSString *path = @"document.body.innerHTML"; NSString *html = [webView stringByEvaluatingJavaScriptFromString:path]; |
由于可以加载Web视图,因此您应该能够像这样从加载的Web视图中获取内容。
如果我可以补充,那就行不通了: