【发布时间】:2014-05-12 01:07:13
【问题描述】:
因此,我一直在尝试为网站创建应用程序,并且“登录”页面正常工作,除非它不会转换到下一个视图。
这是我认为导致问题的代码:
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//NSLog(@"%@", str);
if ([str rangeOfString:@"The username or password you provided is invalid. Please try again."].location == NSNotFound) {
loginPageStatusLabel.text = @"Correct";
NSLog(@"Correct Login");
[self performSegueWithIdentifier:@"toHome" sender:self];
} else {
loginPageStatusLabel.text = @"Incorrect";
NSLog(@"Login Failed");
}
}];
* -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] 中的断言失败,/SourceCache/UIKit_Sim/UIKit-2935.137/Keyboard/UIKeyboardTaskQueue.m:368 2014-05-11 00:06:51.426 LoginTests[3381:3e03] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished]”只能从主线程调用。 waitUntilAllTasksAreFinished]' 只能从主线程调用。
这是每当我尝试“登录”时引发的错误。如果我单独运行它,则 Segue 可以工作,所以我假设问题是应用程序在准备好之前试图转到下一个视图并导致错误。
我对 Obj-C 还很陌生,所以如果我没有发布足够的信息或没有用正确的名称称呼事物,请通知我。
谢谢!
【问题讨论】:
-
与您手头的问题无关,但我会非常警惕在没有“无效”消息的情况下得出成功的结论。有很多错误可能不会导致该消息。您应该确定区分成功的因素,然后寻找它,而不是在没有特定错误消息的情况下得出成功的结论。
-
我如何确定成功的区别?我知道我现在检查的方式不是最好的方式,但据我所知,没有 API,这是唯一的方式。
-
首先,您应该检查以确保
data不是nil。其次,您要确保response对象的statusCode是200。第三,不是检查特定的错误消息,而是确定 Web 服务器在成功时将响应的唯一内容,并检查它(而不是寻找一种特定类型的错误,实际上,可能有许多不同类型的错误)错误)。 -
我明白了,这是一个很好的建议,我一定会遵循的。是否有图书馆或网络抓取的东西?
-
在您深入研究时可能有用的一个库是 HTML 解析器,例如 HPPLE。看到这个Wenderlich introduction to parsing HTML。
标签: ios objective-c nsurlconnection