【问题标题】:ASIHTTPREQUEST xCode - Crashing when setting delegateASIHTTPREQUEST xCode - 设置委托时崩溃
【发布时间】:2012-01-05 00:55:06
【问题描述】:

首先,当请求在 ViewController 中时,应用程序运行良好。我现在已经将它移动到它自己的类文件以符合 MVC 模型,但是当我发起请求时崩溃了。我已经调试并将其范围缩小到我将委托设置为 self 的那一行。我已经编辑了类的 .h 文件以符合 'ASIHTTPRequestDelegate',但仍然没有运气。运行暂停时我没有收到编译器错误,但是当调用该方法时它确实将我指向他的代码行:

if (delegate && [delegate respondsToSelector:didStartSelector]) {

以下代码是我用来发起请求的代码,它是从 ViewController 调用的。有什么想法吗?

-(void) authenticateLoginWithURLString:(NSString *)address Username:(NSString*)username Password:(NSString*)password{
    //LoginViewController *loginVC = [LoginViewController new];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:address]];
    [request setPostValue:username forKey:@"u"];
    [request setPostValue:password forKey:@"pw"];
    [request setDelegate:self];
    [request startAsynchronous];
}

【问题讨论】:

  • 你遇到了什么异常?
  • 我一个都看不到,只是停顿了一下。除非我找错地方(控制台)。
  • 我已经添加了一个屏幕截图,但对于尺寸感到抱歉。
  • 您的类是否实现了requestFinished: 方法,如ASIHTTPRequestDelegate 中定义的那样?
  • 是的,确实如此。如下:- (void) requestFinished:(ASIHTTPRequest *)request;之前一切正常,只是我把它移到了一个新的班级。

标签: ios xcode delegates asihttprequest


【解决方案1】:

这就是我的想法。您会在绿色水平条的右侧看到如何显示 EXC_BAD_ACCESS。基本上,您将 self 作为委托传递,并且该对象(self)在可以验证具有选择器之前被释放。换句话说,无论您在哪里创建该类的实例,都需要对其进行强引用,以免它被释放。

如果还不够清楚,请告诉我。

【讨论】:

  • 感谢您的详细解答!我在这里调用它,我如何将它设置为强而不是弱? databaseConnection* dbConnection = [databaseConnection new];
  • 你应该使用 [databaseConnection alloc] init];此外,您应该使用大写字母命名类,例如:DatabaseConnection。最后,您应该在此文件的 .h 文件中创建一个属性,如下所示:@property (nonatomic, strong) DatabaseConnection * dbConnection;并在您的 .m 文件中合成后将其分配给它。
  • 啊,谢谢。我知道命名约定,创建它时我只是半睡半醒。我会尽快尝试更改它。我会试一试,让你知道。再次感谢!
  • 我要删除databaseConnection* dbConnection = [[databaseConnection alloc] init];吗?正如 Xcode 所说,我将隐藏实例变量。
  • 你应该删除声明,只使用 self.dbConnection = [[databaseConnection alloc] init];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多