Я использую SWRevealViewController segue, который вызывается методом, но не запускается. В журнал не сообщается об ошибках, и это не приводит к зависанию или сбою приложения. Я проверил ссылку segue на раскадровке, и у нее есть правильный класс и идентификатор.iOS: Программно называется segue not working
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:loadUrl];
NSLog(loadUrl);
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if([data length] > 0 && error == nil)
[mWebView loadRequest:request];
else if (error != nil)
NSLog(@"Error: %", error);}
];
}
- (void) captureOutput:(AVCaptureOutput *)captureOutput
didOutputMetadataObjects:(NSArray *)metadataObjects
fromConnection:(AVCaptureConnection *)connection
{
[metadataObjects
enumerateObjectsUsingBlock:^(AVMetadataObject *obj,
NSUInteger idx,
BOOL *stop)
{
if ([obj isKindOfClass:
[AVMetadataMachineReadableCodeObject class]])
{
// 3
AVMetadataMachineReadableCodeObject *code =
(AVMetadataMachineReadableCodeObject*)
[_previewLayer transformedMetadataObjectForMetadataObject:obj];
// 4
Barcode * barcode = [Barcode processMetadataObject:code];
for(NSString * str in self.allowedBarcodeTypes){
if([barcode.getBarcodeType isEqualToString:str]){
[self validBarcodeFound:barcode];
return;
}
}
}
}];
}
- (void) validBarcodeFound:(Barcode *)barcode{
[self stopRunning];
[self.foundBarcodes addObject:barcode];
NSString *input = [barcode getBarcodeData];
[NSString stringWithFormat:@"%lu",(unsigned long) [self.foundBarcodes count]-1];
if ([input length] >= 13)
{
input = [input substringToIndex:12];
}
loadUrl = [[@"http://www.mywebsite.com/" stringByAppendingString:input] stringByAppendingString:@"?utm_source=iphone"];
[super viewDidLoad];
[self performSegueWithIdentifier:@"toWebControl" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[super viewDidLoad];
}
Почему все вызовы '[super viewDidLoad]'? Это следует вызывать только изнутри 'viewDidLoad'? Мне также нужно показать больше кода. То есть, что вызывает 'validateBarcodeFound' и когда? Возможно, я переместил бы ваш код запроса в 'viewWillAppear', чтобы вы знали, что ваш интерфейс полностью настроен. –
убедитесь, что вы выполняете свой сеанс в главной очереди. Я вижу, что ваш обратный вызов асинхронного запроса выполняется на отдельном NSOperationQueue, поэтому вам нужно 'dispatch_async' передать' dispatch_get_main_queue' код, выполняющий segue. –
@ Sega-Zero был прав. Большое спасибо! – tonyony