Я создаю приложение вокруг API Feedly. Так, в UIWebView используется для входа в систему, я использую следующий код:Segue не работает?
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *URLString = [[request URL] absoluteString];
NSString *urlStart = [URLString substringToIndex:23];
if ([urlStart isEqualToString:@"http://localhost/?code="])
{
NSString *haystack = request.URL.absoluteString;
[self useURL:haystack];
}
return YES;
}
Как вы можете видеть, это вызывает метод useURL:
- (void)useURL:(NSString *)haystack {
NSString *prefix = @"http://localhost/?code=";
NSString *suffix = @"&state=";suffix!
NSRange needleRange = NSMakeRange(prefix.length,
haystack.length - prefix.length - suffix.length);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle);
NSString *valueToSave = needle;
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"AuthCode"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *client_id = @"id";
NSString *client_secret = @"secret";
NSString *redirect_uri = @"http://localhost";
NSString *state = @"";
NSString *grant_type = @"authorization_code";
NSInteger success = 0;
@try {
NSString *post =[[NSString alloc] initWithFormat:@"code=%@&client_id=%@&client_secret=%@&redirect_uri=%@&state=%@&grant_type=%@",needle,client_id,client_secret,redirect_uri,state,grant_type];
NSLog(@"PostData: %@",post);
NSURL *url=[NSURL URLWithString:@"https://cloud.feedly.com/v3/auth/token"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
//[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"Response code: %ld", (long)[response statusCode]);
if ([response statusCode] >= 200 && [response statusCode] < 300)
{
NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"Response ==> %@", responseData);
NSError *error = nil;
NSDictionary *jsonData = [NSJSONSerialization
JSONObjectWithData:urlData
options:NSJSONReadingMutableContainers
error:&error];
NSString *accessToken = jsonData[@"access_token"];
NSString *refreshToken = jsonData[@"refresh_token"];
//[self performSegueWithIdentifier:@"presentNewView" sender:self];
NewViewController *newView = [[NewViewController alloc] init];
[self presentViewController:newView animated:NO completion:nil];
} else {
NSLog(@"Failed.");
}
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
}
}
Большинство из них штраф в размере до работы до той части, где следующий взгляд должен прийти. Я пробовал это с помощью segue, и я пробовал путь, как здесь видно, но оба продолжают бросать Exception: *** -[NSURL initFileURLWithPath:]: nil string parameter
Что я здесь делаю неправильно?
где происходит эта ошибка? какая линия? – luk2302
@ luk2302 Я не получаю строку, но когда комментирую segue и/или 'presentViewController', я не получаю ошибку. – user4486205
Вызывается ли initFileURLWithPath из вашего NewViewController? Если это так, возможно, вы не передаете строку URL-адреса, прежде чем пытаться ее представить. – Gismay