我试图在从我的视图控制器调用的类中实例化BAD_ACCESS
时得到NSURLConnection
。
我在类中实现了委托方法,接口是NSObject <NSURLConnectionDelegate>
的子类。
我不能为我的生活找出问题所在:
NSURL *url = [NSURL URLWithString:@"http://valid-value-here"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init ];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json;chartset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSString *myJSONString = @"valid-json-string";
NSData *myJSONData = [myJSONString dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger cCount = [myJSONString length];
[request addValue:[NSString stringWithFormat:@"%d", cCount] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:myJSONData];
NSURLResponse *theResponse = [[NSURLResponse alloc]init];
NSError *theError = nil;
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
当代码点击上面的最后一行时,就会发生异常。
我大部分时间都是.Net开发人员,因此我对XCode的熟悉程度低于标准,而且我对Objective-C也相对较新,所以对任何帮助表示赞赏!
修改
以下是ZombieEnabled的输出: * - [AccountApi登录:密码:onSuccess:onFail:]:发送到解除分配的实例0x71427c0的消息
这就是NSURLConnection
生活在其中的方法。它通过以下方式调用:
loginApi = [[AccountApi alloc] init];
[loginApi Login: @"" password:@"" onSuccess:^{} onFail:^{}];
将loginApi
声明为AccountApi *loginApi;
,高于视图控制器的@implementation
。
编辑2
我通过以下方式将AccountApi
的引用声明为实例变量:
@implementation LoginViewController {
AccountApi *lApi;
}
然后在函数中:
- (void)callApi
{
lApi = [[AccountApi alloc] init];
NSString *login = userLogin.text;
NSString *pass = userPassword.text;
[lApi Login: login password: pass onSuccess:^{
[self successBlock]; // For example...
} onFail:^{
[self failBlock]; // For example...
}];
}
这仍然会产生: * - [AccountApi登录:密码:onSuccess:onFail:]:发送到解除分配的实例的消息0x7154ba0
编辑3
我已确认lApi
在Login
来电时已经是僵尸了。如何从3行代码中解除分配:lApi = [[AccountApi alloc] init];
到呼叫?
解决
在AccountApi
我的初始化失踪了......呃:
是:
- (id)init {
}
应该是:
- (id)init {
return self;
}