I am using a SWRevealViewController segue that is called via method but isn't getting triggered. No errors are reported to the log, and it doesn't cause the app to hang or crash. I've checked the segue link on the storyboard and it has the correct class and identifier.
- (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];
}
Always perform a segue in the main queue. Your callback is executing in the separate
NSOperationQueue
, you need to wrapperformSegueWithIdentifier
indispatch_async(dispatch_get_main_queue,...
.Plus, as @rory-mckinnel mentioned in the comments, remove unnecessary
[super viewDidLoad]
calls as in may lead to unexpected results.