ASIFormDataRequest在模拟器上工作,但不在设备上?

我正在使用ASIFormDataRequest发布三个值,这是一个url,标题和摘要。 他们都在模拟器上正常工作,但它不能在设备上工作。 以下是我正在使用的代码:

- (IBAction)addLinkPressed:(UIButton *)sender { ASIFormDataRequest *loginRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://MyWebsite.com/login.php"]]; [loginRequest setRequestMethod:@"POST"]; [loginRequest setPostValue:[[NSUserDefaults standardUserDefaults] objectForKey:@"defaultUsername"] forKey:@"username"]; [loginRequest setPostValue:[[NSUserDefaults standardUserDefaults] objectForKey:@"defaultPassword"] forKey:@"password"]; [loginRequest setUseKeychainPersistence:YES]; [loginRequest setDelegate:self]; [loginRequest setDidFinishSelector:@selector(requestLoginFinished:)]; [loginRequest setDidFailSelector:@selector(requestLoginFailed:)]; [loginRequest startSynchronous]; NSString *strURL = @"http://MyWebsite.com/send_link.php"; ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:strURL]]; [request setDelegate:self]; [request setPostValue:self.linkField.text forKey:@"url"]; [request setPostValue:self.linkTitleField.text forKey:@"title"]; [request setPostValue:self.linkSummaryField.text forKey:@"summary"]; [request setDidFinishSelector:@selector(requestDone:)]; [request setDidFailSelector:@selector(requestWentWrong:)]; [request startAsynchronous]; } 

任何人都可以帮助我!

首先:ASIRequest不再支持。 在某些情况下,它被称为是越野车,并且错误不会被修复。

第二个,关于你的问题,我看到两个地方可能出现错误(模拟器和设备的区别):

  1. 你确定在设备上[[NSUserDefaults standardUserDefaults] objectForKey:@"defaultUsername"][[NSUserDefaults standardUserDefaults] objectForKey:@"defaultPassword"]是否设置正确?

  2. 在iOS模拟器上,您无法访问钥匙串,所以此设置( [loginRequest setUseKeychainPersistence:YES]; )也可能导致设备出现问题。

我build议检查NSUserDefaults并更好地使用另一个框架,即RestKit

编辑:

使用RestKit的示例:

 [RKClient clientWithBaseURLString:@"http://example.com"]; RKClient *rkclient = [RKClient sharedClient]; RKParams *params = [RKParams paramsWithDictionary:[NSDictionary dictionaryWithObjectsAndKeys: username, @"username", password, @"password", nil]]; [rkclient post:@"/profile" params:params delegate:self]; // implement needed delegate methods