Question

In Xcode 5.0.2 I have created a simple iPhone app (the source code is available at GitHub) with navigation controller, which first displays a web view with Facebook oAuth dialog and - once the user has authenticated and her details have been fetched - tries to push the DetailViewController:

storyboard screenshot

In the above storyboard I have called the segue segue and push it in the ViewController.m by the following code:

[self performSegueWithIdentifier: @"segue" sender: self];

NSLog(@"id: %@", dict[@"id"]);
NSLog(@"first_name: %@", dict[@"first_name"]);
NSLog(@"last_name: %@", dict[@"last_name"]);
NSLog(@"gender: %@", dict[@"gender"]);
NSLog(@"city: %@", dict[@"location"][@"name"]);

The Facebook user data is fetched fine and printed almost immediately:

id: 597287941
first_name: Alexander
last_name: Farber
gender: male
city: Bochum, Germany

but then about a minute passes before the segue takes place or sometimes the app even crashes with:

2014-01-09 22:11:29.017 oauthFacebook[4012:1403] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<DetailViewController 0x8a89cd0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key id.'
*** First throw call stack:
(
    0   CoreFoundation                      0x0173b5e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x014be8b6 objc_exception_throw + 44
    2   CoreFoundation                      0x017cb6a1 -[NSException raise] + 17
    3   Foundation                          0x0117f9ee -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 282
    4   Foundation                          0x010ebcfb _NSSetUsingKeyValueSetter + 88
    5   Foundation                          0x010eb253 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 267
    6   Foundation                          0x0114d70a -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 412
    7   UIKit                               0x004cea15 -[UIRuntimeOutletConnection connect] + 106
    8   libobjc.A.dylib                     0x014d07d2 -[NSObject performSelector:] + 62
    9   CoreFoundation                      0x01736b6a -[NSArray makeObjectsPerformSelector:] + 314
    10  UIKit                               0x004cd56e -[UINib instantiateWithOwner:options:] + 1417
    11  UIKit                               0x0033f605 -[UIViewController _loadViewFromNibNamed:bundle:] + 280
    12  UIKit                               0x0033fdad -[UIViewController loadView] + 302
    13  UIKit                               0x003400ae -[UIViewController loadViewIfRequired] + 78
    14  UIKit                               0x003405b4 -[UIViewController view] + 35
    15  UIKit                               0x0035a3e2 -[UINavigationController _startCustomTransition:] + 778
    16  UIKit                               0x003670c7 -[UINavigationController _startDeferredTransitionIfNeeded:] + 688
    17  UIKit                               0x00367cb9 -[UINavigationController __viewWillLayoutSubviews] + 57
    18  UIKit                               0x004a1181 -[UILayoutContainerView layoutSubviews] + 213
    19  UIKit                               0x00297267 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355
    20  libobjc.A.dylib                     0x014d081f -[NSObject performSelector:withObject:] + 70
    21  QuartzCore                          0x03b492ea -[CALayer layoutSublayers] + 148
    22  QuartzCore                          0x03b3d0d4 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
    23  QuartzCore                          0x03b3cf40 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26
    24  QuartzCore                          0x03aa4ae6 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294
    25  QuartzCore                          0x03aa5e71 _ZN2CA11Transaction6commitEv + 393
    26  QuartzCore                          0x03aa60c2 _ZN2CA11Transaction14release_threadEPv + 226
    27  libsystem_pthread.dylib             0x01e7681c _pthread_tsd_cleanup + 93
    28  libsystem_pthread.dylib             0x01e7327e _pthread_exit + 108
    29  libsystem_pthread.dylib             0x01e73dd8 pthread_workqueue_setdispatchoffset_np + 0
    30  libsystem_pthread.dylib             0x01e77cce start_wqthread + 30
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

What could be the reason for this behaviour please?

UPDATE:

I have cleaned up the IBOutlets as suggested by Savana (thanks), but the app still crashes:

2014-01-10 10:26:59.379 oauthFacebook[4342:4113] bool _WebTryThreadLock(bool), 0x8be2960: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...
1   0x51481ae WebThreadLock
2   0x452a57 -[UIWebDocumentView _responderForBecomeFirstResponder]
3   0x27da9e -[UIView setUserInteractionEnabled:]
4   0x934d72 -[_UIViewControllerTransitionContext _disableInteractionForViews:]
5   0x368573 -[UINavigationController pushViewController:transition:forceImmediate:]
6   0x3680b5 -[UINavigationController pushViewController:animated:]
7   0x770c65 -[UIStoryboardPushSegue perform]
8   0x76107e -[UIStoryboardSegueTemplate _perform:]
9   0x342280 -[UIViewController performSegueWithIdentifier:sender:]
10  0x29f0 __32-[ViewController fetchFacebook:]_block_invoke
11  0x11da695 __67+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]_block_invoke_2
12  0x113a945 -[NSBlockOperation main]
13  0x1193829 -[__NSOperationInternal _start:]
14  0x1110558 -[NSOperation start]
15  0x1195af4 __NSOQSchedule_f
16  0x1ae74b0 _dispatch_client_callout
17  0x1ad4018 _dispatch_async_redirect_invoke
18  0x1ae74b0 _dispatch_client_callout
19  0x1ad5eeb _dispatch_root_queue_drain
20  0x1ad6137 _dispatch_worker_thread2
21  0x1e73dab _pthread_wqthread
22  0x1e77cce start_wqthread
(lldb) 

And also when I add an assert([NSThread isMainThread]); before the performSegueWithIdentifier call, I can see that this is not the main thread...

Is being on the main thread a requirement for calling performSegueWithIdentifier?

Was it helpful?

Solution

I have been able to solve my problem (the detail view controller being displayed after a delay or the app even crashing) with this code:

         dispatch_async(dispatch_get_main_queue(), ^(void) {
             [self performSegueWithIdentifier: @"segue" sender: self];
         });

OTHER TIPS

enter image description hereI had downloaded and check your story board in detail view controller there's and outlet from first textfield to userid and id but there's no IBoutlet in code, delete id IBOutlet in story board

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top